在swift的學習過程中,我發現理解屬性,對後續學習類(class)、列舉(enumeration)和協議(protocol)很有幫助,現在總結一下swift中屬性的分類,主要分為四大類:
儲存例項屬性(stored instance property):儲存在例項的記憶體中的屬性,只有乙份
計算例項屬性(computed instance property):不占用系統記憶體,呼叫的時候才計算得出的例項屬性,類似例項的方法
儲存型別屬性(stored type property):整個程式執行過程中就只有乙份記憶體,類似全域性變數或常量
計算型別屬性(computed type property):不占用系統記憶體,呼叫的時候才計算得出的屬性,類似全域性函式
下面分別詳細的總結一下:
enum
animal
class
wronganimal
// class 'wronganimal' has no initializers
// 所有儲存例項屬性必須初始化:
class
animal
}var animal =
animal
(eyes:
2)
extension
animal
struct
point}}
let point =
point
(x:3
, y:4)
point.distancetoorigin // 5
struct
point
}
extension
point
}
protocol
game
var lose:
int}
extension
game
}struct
footballgame
:game
let footballgame =
footballgame
(win:
8, lose:2)
footballgame.winrate // 0.8
enum
color
:int
color
.blue.rawvalue // 2
color
.yellow.rawvalue =
4// cannot assign to property: 'rawvalue' is immutable
enum
color
:int}}
color
.blue.rawvalue // 20
struct
storage
store
.books // 10
store
.money =
30
class
storage
class
largestorage
:storage
extension
uicolor
uicolor
.mycolor
class
storage
}
class
largestorage
:storage
}
swift中的屬性主要可以分為四大類:儲存例項屬性,計算例項屬性,儲存型別屬性,計算型別屬性。
進一步總結,如果按記憶體儲存方式分類,可以分為兩大類:儲存屬性(儲存在系統記憶體中變數或者常量)和計算屬性(不占用記憶體,類似函式),如果按屬性是屬於例項還是類,可以分為:例項屬性(屬於例項的屬性)和型別屬性(屬於類的屬性,用static
或者class
修飾)。
理解的屬性的分類,我們可以大概推出某類屬性的適用場景和規則,比如儲存例項屬性,因為要儲存在例項的記憶體中,所以例項初始化的時候必須初始化全部的儲存屬性(optional型別除外),這也解釋了為什麼extension
中為什麼不能新增儲存例項屬性,因為如果這樣做了,那麼這個屬性就必須存在於例項的記憶體中,那之前所有已經初始化的例項就必須全部修改,幾乎不可能實現,所以extension中只能新增計算屬性或者儲存型別屬性。
理解分類後,以後看到乙個屬性,大概知道這是什麼型別的屬性,從而理解這個屬性設計者的意圖,加快理解**。
其實屬性還有很多內容,比如屬性觀察器(property observers),對應關鍵字willset
和didset
,還有延遲屬性(lazy properties),理解屬性分類後再去學習這些內容會容易很多。
JS中Attribute和property的區別
在使用angular中的資料繫結時,發現對html屬性和dom屬性不是很清楚,順便屢屢清楚這二者的區別。attribute html屬性,書寫在標籤內的屬性,使用setattribute 和getattribute 進行設定和獲取。property dom屬性,html標籤對應的dom節點屬性,使用...
Swift中延遲屬性 lazy
延遲儲存屬性是指當第一次被呼叫的時候才會計算其初始值的屬性。在屬性宣告前使用 lazy來標示乙個延遲儲存屬性。注意 必須將延遲儲存屬性宣告成變數 使用var關鍵字 因為屬性的值在例項構造完成之前可能無法得到。而常量屬性在構造過程完成之前必須要有初始值,因此無法宣告成延遲屬性。延遲屬性很有用,當屬性的...
Swift靜態屬性
在介紹靜態屬性之前,我們先來看乙個類的設計,有乙個account 銀行賬戶 類,假設它有3個屬性 amount 賬戶金額 interestrate 利率 和owner 賬戶名 在這3個屬性中,amount和owner會因人而異,不同的賬戶這些內容是不同的,而所有賬戶的interestrate都是相同...