您好,登錄后才能下訂單哦!
本篇內容介紹了“Swift2.0對象基礎知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
類與實例(對象)
類“是引用類型”,而非“值類型”
使用class關鍵字定義類
class People {
var name:String = ""
var age = 0
}
People是類名
{}包含類的主體部分,包括屬性和行為
命名規范:類名首字母大寫
通過類可以創建實例變量或實例常量
var p1:People = People()
let p2 = People()
People()表示調用了People類的構造器
實例對象通過 . 運算符 訪問屬性和行為
屬性
可以帶默認值,也可以不帶默認值(稍后介紹)
可以是變量,也可以是常量,常量必須有默認值
屬性的類型也可以是可選類型
屬性可以分成兩大類:
存儲屬性:占用存儲空間
行為屬性:不占用存儲空間,訪問屬性時實際上是調用方法
靜態存儲屬性:
使用static聲明,屬于整個類型而不是某個實例對象
通過類名訪問靜態存儲屬性
惰性存儲屬性:(存儲屬性)
這種屬性只有到了一段時間后或某個條件出發后才會存在
在此之前,該屬性僅僅是占位,無存儲空間
惰性屬性實現了類似懶加載的功能(當屬性的值需要復雜或大量計算時)
關鍵字:lazy,必須是變量,必須有初值,如:
class People {
var name:String = ""
lazy var age = 0
func printAge() {
print("age is \(age)")
}
}
var p1:People = People()
p1.printAge()
在創建完p1實例后,通過調試器可以查看到age.storage=nil
在調用printAge()方法后,由于訪問到了age屬性,通過調試器可以看到age.storage=0
惰性屬性的初值通常設定為函數的返回值或對象,以實現懶加載的功能
行為屬性:
雖是屬性但沒有實際存儲空間,提供取值訪問器get和賦值訪問器set
行為屬性必須是變量,不能有初值
get的語法:
var 行為屬性:類型 {
get {
return 符合類型的值
}
}
可簡化為:
var 行為屬性:類型 {
return 符合類型的值
}
set的語法:
var 行為屬性:類型 {
set (newValue) {
//操作
}
}
可簡化為:
var 行為屬性:類型 {
set {//操作}//省略的參數名默認為newValue
}
如:
class People {
var mindDesc:String = ""
var dream:String = ""
var reality:String = ""
var isHappy:Bool {
get {
if (!dream.isEmpty && dream == reality) || mindDesc == "Happy" {
return true
}
else {
return false
}
}
set(newValue) {
if ( newValue ) {
mindDesc = "Happy"
}
else {
mindDesc = "No Happy"
}
}
}
}
var p1 = People()
p1.isHappy = true
//p1.dream = "中500萬"
//p1.reality = "沒中獎"
print(p1.mindDesc)
print(p1.isHappy)
如果不提供set賦值訪問器,則該屬性是只讀的,如:
var isHappy:Bool {
if (!dream.isEmpty && dream == reality) || mindDesc == "Happy" {
return true
}
else {
return false
}
}
類行為屬性:
類行為屬性是一種特殊的行為屬性,屬于整個類型,而不屬于某個實例對象
使用class修飾,通過類名訪問
也可稱作是靜態行為屬性(static一般用于結構體、枚舉,class用于類類型)
語法: class var 屬性名:類型 { get/set{} }
如:
class People {
class var maxHeight:Float {
return 2.40
}
}
print(People.maxHeight)
屬性的觀察器:
用于檢測屬性變化的周期,分成willSet和didSet兩個觀察期
語法:willSet(newValue){} didSet(oldValue) //參數都可以省略
如:
class People {
var salary:Int = 200 {
willSet{
print("工資調整了!")
}
didSet{
if salary > oldValue {
print("漲工資了!")
}
else if salary < oldValue {
print("降工資了!")
}
}
}
}
var p1:People = People()
p1.salary = 300
p1.salary = 150
屬性觀察器實現了類似KVO模式的功能
屬性觀察器同樣適用于全局變量和局部變量,其中全局變量可理解為省略了lazy的惰性行為變量
方法
方法是與類型相關聯的函數,是類應具有的行為動作,與C++/Java這些語言不同的是:在結構體和枚舉中都可以定義方法
對象方法:
實例方法通過實例對象通過.運算符調用
如:
class People {
var salary:Int = 200
func receiveSalary(date:String)->Int {
print("發 \(date) 工資了!")
return salary
}
}
var p1:People = People()
var s = p1.receiveSalary("2016年2月")
print("salary is \(s)")
在實例方法內部可以直接訪問屬性,因為屬性的作用域是在類的內部
在實例方法內部可以直接調用實例方法,因為實例方法的作用域是在類的內部
注意:方法也是函數,函數的規則都是支持的
類方法:
與類型屬性類似,不屬于某個實例對象,而是屬于整個類,通過類名調用
語法:class func 方法名(參數列表)->返回值 {}
也稱“靜態方法”(static用于結構體、枚舉,class用于類類型)
如:
class People {
class var desc:String {
return "人類"
}
class func printDesc() {
print("我們是\(desc)")
}
}
People.printDesc()
需要注意的是:在類方法內部,只能訪問類行為屬性、靜態屬性和類方法
方法中的self關鍵字:
在對象方法中,self表示當前實例對象
在類方法中,self表示當前類
下標腳本方法:
是Swift提供的一種特殊對象方法,對象通過下標s運算符調用下標方法
語法:subscript(參數列表)->返回值 { get/set訪問器 }
如:
class People {
var names:[Int:String] = [:]
subscript(index:Int)->String? {
get {
return names[index]
}
set {
names[index] = newValue
}
}
}
var p:People = People()
p[001] = "張三"
p[007] = "李四"
print(p[001]!)
print(p[007]!)
下標方法的參數可以是多個,甚至是可變的,不能用inout修飾,不能設置默認參數值
下標方法可以重載,也可以只讀,如:
class People {
var names:[Int:String] = [:]
subscript(index:Int)->String? {
get {
return names[index]
}
set {
names[index] = newValue
}
}
subscript(index:Int, appendString:String )->String? {
get {
let s:String? = names[index]!+appendString
return s
}
}
}
var p:People = People()
p[001] = "張三"
p[007] = "李四"
print(p[001]!)
print(p[007, "哈嘍"]!)
swift的訪問權限
三個訪問權限修飾符:private internal public
訪問權限的控制不是基于類的,而是基于文件的,即修飾標識符在哪些源文件中可以進行訪問
可修飾的標識符:類名、結構體名、枚舉名、方法名、屬性名等
private:只能在當前的源文件中訪問
internal:只能在當前源文件所在的模塊中訪問(默認權限,可以不寫)
public:在任意源文件中都可以訪問
“Swift2.0對象基礎知識點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。