-
存儲(chǔ)屬性
- 當(dāng)值類型的實(shí)例被聲明為常量的時(shí)候籍嘹,它的所有屬性也就成了常量方库; 把一個(gè)引用類型的實(shí)例賦給一個(gè)常量后结序,仍然可以修改該實(shí)例的變量屬性。
- 在屬性聲明前使用
lazy
來標(biāo)示一個(gè)延遲存儲(chǔ)屬性纵潦,延遲屬性必須聲明成變量徐鹤。 - 如果一個(gè)被標(biāo)記為
lazy
的屬性在沒有初始化時(shí)就同時(shí)被多個(gè)線程訪問,則無(wú)法保證該屬性只會(huì)被初始化一次邀层。 - swift中的屬性沒有對(duì)應(yīng)的實(shí)例變量返敬,屬性的后端存儲(chǔ)也無(wú)法直接訪問。
-
計(jì)算屬性
- 類寥院、結(jié)構(gòu)體和枚舉可以定義計(jì)算屬性劲赠。計(jì)算屬性不直接存儲(chǔ)值,而是提供一個(gè)
getter
和一個(gè)可選的setter
秸谢,來間接獲取和設(shè)置其他屬性或變量的值凛澎。 - 如果計(jì)算屬性的
setter
沒有定義表示新值的參數(shù)名,則可以使用默認(rèn)名稱newValue
估蹄。 - 只有
getter
沒有setter
的計(jì)算屬性就是只讀計(jì)算屬性预厌。只讀計(jì)算屬性總是返回一個(gè)值,可以通過點(diǎn)運(yùn)算符訪問元媚,但不能設(shè)置新的值轧叽。 - 必須使用
var
關(guān)鍵字定義計(jì)算屬性,包括只讀計(jì)算屬性刊棕,因?yàn)樗麄兊闹挡皇枪潭ǖ摹?code>let關(guān)鍵字只用來聲明常量屬性炭晒,表示初始化后再也無(wú)法修改的值。
- 類寥院、結(jié)構(gòu)體和枚舉可以定義計(jì)算屬性劲赠。計(jì)算屬性不直接存儲(chǔ)值,而是提供一個(gè)
-
屬性觀察器
- 監(jiān)控和響應(yīng)屬性值的變化
-
willSet
- 在新的值被設(shè)置之前調(diào)用
- 可以為參數(shù)指定一個(gè)名稱甥角,如果不指定則使用默認(rèn)名稱
newValue
表示
-
didSet
- 在新的值被設(shè)置之后立即調(diào)用
- 可以為參數(shù)命名或者使用默認(rèn)參數(shù)名
oldValue
- 如果將屬性通過
in-out
方式傳入函數(shù)网严,willSet
和didSet
也會(huì)調(diào)用。這是因?yàn)?code>in-out參數(shù)采用了拷入拷出模式:即在函數(shù)內(nèi)部使用的是參數(shù)的copy
嗤无,函數(shù)結(jié)束后震束,又對(duì)參數(shù)重新賦值怜庸。
-
全局變量和局部變量
- 全局的常量或變量都是延遲計(jì)算的,跟延遲存儲(chǔ)屬性不同的地方在于垢村,全局的常量或變量不需要標(biāo)記
lazy
修飾符割疾。 - 局部范圍的常量或變量從不延遲計(jì)算。
- 全局的常量或變量都是延遲計(jì)算的,跟延遲存儲(chǔ)屬性不同的地方在于垢村,全局的常量或變量不需要標(biāo)記
-
類型屬性
- 在swift中嘉栓,類型屬性是作為類型定義的一部分寫在類型最外層的花括號(hào)內(nèi)宏榕,因此它的作用范圍也就是類型支持的范圍內(nèi)。
- 使用關(guān)鍵字
static
來定義類型屬性侵佃。 - 類型屬性是通過類型本身來訪問麻昼,而不是通過實(shí)例。
結(jié)構(gòu)體和枚舉能夠定義方法是Swift與C/OC的主要區(qū)別之一馋辈。
-
實(shí)例方法
- 使用self屬性來區(qū)分參數(shù)名稱和屬性名稱抚芦。
- 要使用可變方法,將關(guān)鍵字
mutating
放到方法的func
關(guān)鍵字之前就可以了迈螟。
-
類型方法
- 實(shí)例方法是被某個(gè)類型的實(shí)例調(diào)用的方法叉抡。而在類型本身上調(diào)用的方法就叫類型方法。
- 在方法的
func
關(guān)鍵字之前加上關(guān)鍵字static
來指定類型方法井联。