Swift 個人學習筆記 – 09: 屬性

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

本文章純粹是中文版《The Swift Programming Language》的學習筆記,所以絕大部分的內容都是文中有的。本文是本人的學習筆記,不是正式系統的記錄。僅供參考

以下還是有很多沒看懂、不確定的地方,我會以“存疑”的註解指出。

在此感謝中文版翻譯者,這極大地加快了 Swift 的學習速度。

本文地址:https://segmentfault.com/a/1190000008649921


Reference:

原版:The Swift Programming Language
中文版:Swift 3 程式語言 – 屬性

屬性

屬性可以分為計算屬性儲存屬性兩種。

  • 計算屬性可以由 class, struct, enum 定義
  • 儲存屬性可以由 class, struct 定義

在類的內部,可以定義屬性觀察器,實現在屬性變化前和變化後做相應的處理。

儲存屬性

使用 letvar 引入。

延遲儲存屬性

使用 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 屬性之外,所有屬性都可以觀察,主要是 willSetdidSet 關鍵字。

class StepCounter {
var totalSteps: Int = 0 {
willSet (newTotalSteps) {    // 同理,預設名為 “newValue”
...
}
didSet {
...        // 這裡有一個預設值 “oldValue”,用來標示老值
}
}
}

型別屬性

這種屬性,在所有同一型別的類的所有例項僅有一個拷貝。必須賦予一個預設值,不可以使用 lazy 關鍵字。使用 static 關鍵字來標識。

相關文章

IOS開發 最新文章