1. 程式人生 > >Swift 屬性觀察器 willSet, didSet

Swift 屬性觀察器 willSet, didSet

//儲存屬性可以新增屬性觀察器, 除了 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 還沒有被賦值