Swift程式語言學習10 列舉屬性監視器

2021-09-07 04:35:03 字數 1437 閱讀 2126

屬性監視器

屬性監視器監控和響應屬性值的變化,每次屬性被設定值的時候都會呼叫屬性監視器。甚至新的值和如今的值同樣的時候也不例外。

能夠為除了延遲儲存屬性之外的其它儲存屬性加入屬性監視器,也能夠通過過載屬性的方式為繼承的屬性(包含儲存屬性和計算屬性)加入屬性監視器。屬性過載請參考繼承一章的過載。

注意:不須要為無法過載的計算屬性加入屬性監視器,由於能夠通過 setter 直接監控和響應值的變化。

能夠為屬性加入例如以下的乙個或所有監視器:

willset在設定新的值之前呼叫

didset在新的值被設定之後馬上呼叫

willset監視器會將新的屬性值作為固定引數傳入。在willset的實現**中能夠為這個引數指定乙個名稱。假設不指定則引數仍然可用,這時使用預設名稱newvalue表示。

類似地,didset監視器會將舊的屬性值作為引數傳入。能夠為該引數命名或者使用預設引數名oldvalue。

注意:willset和didset監視器在屬性初始化過程中不會被呼叫,他們僅僅會當屬性的值在初始化之外的地方被設定時被呼叫。

這裡是乙個willset和didset的實際樣例,當中定義了乙個名為stepcounter的類,用來統計當人步行時的總步數,能夠跟計步器或其它日常鍛鍊的統計裝置的輸入資料配合使用。

class stepcounter 

didset }}

}let stepcounter = stepcounter()

stepcounter.totalsteps = 200

// about to set totalsteps to 200

// added 200 steps

stepcounter.totalsteps = 360

// about to set totalsteps to 360

// added 160 steps

stepcounter.totalsteps = 896

// about to set totalsteps to 896

// added 536 steps

stepcounter類定義了乙個int型別的屬性totalsteps。它是乙個儲存屬性,包括willset和didset監視器。

當totalsteps設定新值的時候。它的willset和didset監視器都會被呼叫。甚至當新的值和如今的值全然同樣也會呼叫。

樣例中的willset監視器將表示新值的引數自己定義為newtotalsteps,這個監視器僅僅是簡單的將新的值輸出。

didset監視器在totalsteps的值改變後被呼叫,它把新的值和舊的值進行對照,假設總的步數新增了,就輸出乙個訊息表示新增了多少步。didset沒有提供自己定義名稱,所以預設值oldvalue表示舊值的引數名。

注意:假設在didset監視器裡為屬性賦值,這個值會替換監視器之前設定的值。

Swift學習筆記 10 列舉

1.定義語法 enum someenumeration2.使用 enum compasspoint var directiontohead compasspoint.west directiontohead south switch directiontohead 注 1.變數乙個次賦值為列舉型別以...

swift學習筆記 20 列舉

當乙個變數有固定的幾個取值的時候,建議用列舉,比如說星期,月份等 列舉型別定義的資料型別的取值,只能是 case 後面的取值 enum weekday string var dayone weekday.friday 如果要改變 dayone 的值,用.就可以訪問 dayone monday 如果s...

swift學習筆記(8) 列舉

enum someenumeration 下面是用列舉表示指南針四個方向的例子 enum compasspoint 列舉中定義的值 如 north,south,east和west 是這個列舉的成員值 或成員 你可以使用case關鍵字來定義乙個新的列舉成員值。注意 與 c 和 objective c ...