Swift 屬性觀察器 willSet, didSet
阿新 • • 發佈:2018-11-08
//儲存屬性可以新增屬性觀察器, 除了 lazy stored property
//不需要為無法過載的計算屬性新增屬性觀察器,因為可以通過 setter 直接監控和響應值的變化。
//每次屬性被設定值的時候都會呼叫,即使新的值和現在的值相同
//可以通過重寫屬性的方式為繼承的屬性(包括儲存屬性和計算屬性)新增屬性觀察器。
//注意:
//willSet和didSet觀察器在屬性初始化過程中不會被呼叫,它們只會當屬性的值在初始化之外的地方被設定時被呼叫。
//可以為屬性新增如下的一個或兩個觀察器:
//willSet在設定新的值之前呼叫
//didSet在新的值被設定之後立即呼叫
//willSet觀察器會將新的屬性值作為固定引數傳入,在willSet的實現程式碼中可以為這個引數指定一個名稱,如果不指定則引數仍然可用,這時使用預設名稱newValue表示。
//類似地,didSet觀察器會將舊的屬性值作為引數傳入,可以為該引數命名或者使用預設引數名oldValue。
錯誤使用: tableView reload
var data:[String] = [] { willSet {//不能用willSet, willSet 在賦值之前呼叫 self.tableView.reloadData() } }
因為 willSet 在設定之前呼叫, 所有在給 tableView 的 DataSource 設定屬性觀察器 reloadtableView 時, 不能寫在 willSet 中, 此時 DataSource 還沒有被賦值