swift學習記錄(計算屬性和屬性觀察者)

2021-07-09 02:34:52 字數 1393 閱讀 9360

計算屬性不直接儲存值,而是提供乙個 getter 和乙個可選的 setter,來間接獲取和設定其他屬性或變數的值。

基本語法

class \ struct \ enum  型別名

set(新屬性值) }

}**示例:

class rect 

set(newy)

}var area :int

}}var rect = rect()

rect.y = 30 //呼叫y的set方法

print(rect.area) //呼叫area的get方法

便捷 setter 宣告

如果計算屬性的 setter 沒有定義表示新值的引數名,則可以使用預設名稱newvalue

所以上面計算屬性 y  的set方法可以簡寫為:

set

唯讀計算屬性

只有 getter 沒有 setter 的計算屬性就是唯讀計算屬性。唯讀計算屬性總是返回乙個值,可以通過點運算子訪

問,但不能設定新的值。

唯讀計算屬性的宣告可以去掉get 關鍵字和花括號:

所以上面的唯讀計算屬性 area 可以簡寫為:

var area :int

屬性觀察者

屬性觀察者,監聽和相應屬性值的變化,每次屬性被設定值的時候都會呼叫屬性觀察者。

可以為除了延遲儲存屬性之外的其他儲存屬性新增屬性觀察器,也可以通過過載屬性的方式為繼承的屬性(包括儲存屬性和計算屬性)新增屬性觀察器

不需要為非過載的計算屬性新增屬性觀察器,因為可以通過它的 setter 直接監控和響應值的變化。

可以為屬性新增如下的乙個或全部觀察者:

willset 在新的值被設定之前呼叫。觀察者會將新的屬性值作為常量引數傳入,在willset 的實現**中可以為這個引數指定乙個名稱,如果不指定則使用預設名稱newvalue 。

didset

在新的值被設定之後立即呼叫。觀察者會將舊的屬性值作為引數傳入,可以為該引數命名或者使用預設引數名oldvalue 。

class person

didset

}}//var per = person()

= "張三"

class boy :person

didset

}}var zs = boy()

zs.name = "張三"

zs.age = 10

注意:

父類的屬性在子類的構造器中被賦值時,它在父類中的willset 和didset 觀察器會被呼叫。

如果在乙個屬性的didset 觀察器裡為它賦值,這個值會替換該觀察器之前設定的值。

swift學習記錄(儲存屬性)

屬性 屬性將值跟特定的類 結構體和列舉關聯。swift中的屬性分為儲存屬性和計算屬性兩種。儲存屬性 乙個儲存屬性就是儲存在特定類或結構體的例項裡的乙個常量或變數。儲存屬性可以是變數儲存屬 性 用關鍵字 var 定義 也可以是 常量儲存屬性 用關鍵字 let 定義 class person let b...

swift學習之十四 計算屬性和儲存屬性

注意點 1 willset得注意大小寫,寫錯了,不認識,而且還沒有書寫提示。2 儲存屬性只要合法,不用指明型別或者初始值,都可以加willset.3 即使是相同的值,也會呼叫 4 willset和didset只能用於儲存屬性。set和get只能用於計算屬性,但沒有只寫屬性。8,和int64一樣,8個...

Swift學習筆記 屬性

定義乙個屬性 struct fixedlengthrange fixedlengthrange這個類裡面有兩個屬性,乙個為 firstvalue int 為可變型別,另外乙個為 length 為不可變型別 屬性賦值 var rangeofthreeitems fixedlengthrange fir...