本文章純粹是中文版《The Swift Programming Language》的學習筆記,所以絕大部分的內容都是文中有的。本文是本人的學習筆記,不是正式系統的記錄。僅供參考
以下還是有很多沒看懂、不確定的地方,我會以“存疑”的註解指出。
在此感謝中文版翻譯者,這極大地加快了 Swift 的學習速度。
本文地址:https://segmentfault.com/a/1190000008649921
Reference:
原版:The Swift Programming Language
中文版:Swift 3 程式語言 – 屬性
屬性
屬性可以分為計算屬性
和儲存屬性
兩種。
- 計算屬性可以由
class
,struct
,enum
定義 - 儲存屬性可以由
class
,struct
定義
在類的內部,可以定義屬性觀察器,實現在屬性變化前和變化後做相應的處理。
儲存屬性
使用 let
或 var
引入。
延遲儲存屬性
使用 lazy
關鍵字來修飾變數,則相應的屬性在首次使用的時候才會去計算其值。比如說在類裡面定義一個 lazy 類成員,那麼這個成員直郵在首次訪問的時候才會建立相應的例項。
需要注意的是:延遲儲存屬性本身並不是執行緒安全的
計算屬性
提供一個 getter
和一個可選的 setter
來間接得到和設定相應的屬性值。類似於 Objective-C 裡面過載 getter 和 setter 的行為。以下是例子:
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
...
return ...
}
set (newCenter) { // 如果不顯式指定變數名的話,則預設為 “newValue”
...
}
}
}
如果只提供了 getter 就表示這是一個只讀屬性。
屬性觀察
除了 lazy 屬性之外,所有屬性都可以觀察,主要是 willSet
和 didSet
關鍵字。
class StepCounter {
var totalSteps: Int = 0 {
willSet (newTotalSteps) { // 同理,預設名為 “newValue”
...
}
didSet {
... // 這裡有一個預設值 “oldValue”,用來標示老值
}
}
}
型別屬性
這種屬性,在所有同一型別的類的所有例項僅有一個拷貝。必須賦予一個預設值,不可以使用 lazy 關鍵字。使用 static
關鍵字來標識。
写评论
很抱歉,必須登入網站才能發佈留言。