swift 屬性觀察器

概念

用來監視屬性值變化,當屬性值發生改變時能夠對此做出響應。能夠爲除了延遲存儲屬性以外的其餘存儲屬性添加屬性觀察器,也能夠經過重載屬性的方式爲繼承的屬性(包括存儲屬性和計算屬性)添加屬性觀察器。swift

  • willset 觀察器會將新的屬性值做爲固定參數傳入,在willSet的實現代碼中能夠爲這個參數指定一個名稱,若是不指定則參數仍然可用,這時使用默認名稱 newValue 表示。
  • didSet 觀察器會將舊的屬性值做爲參數傳入,能夠爲該參數命名或者使用默認參數名 oldValue

使用

swift 屬性擁有 set get 語法bash

var score : int {
    get { return getNum() }
    set { setBum(newValue) }
}
複製代碼

willSetdidSet 分別在調用 set 方法以前和以後被調用,其意義在於有時候咱們須要在存儲屬性時作一些事情,例如通知某個對象,這個屬性被改變了。若是隻有 get set 方法,咱們就須要聲明另一個字段來保存改動以前的值。藉助 willSetdidSet 方法就不須要額外的字段了,直接使用 newValueoldValue 就能夠了。markdown

class Student {
    var score: Int = 0 {
        willSet{
           print("will set score to \(newValue)")
        }
        didSet{
            print("did set score to \(oldValue)")
        }
    }
}
let student = Student()
student.score = 60
student.score = 99
複製代碼

輸出spa

will set score to 60
did set score to 0
will set score to 99
did set score to 60
複製代碼

注意

  • willSetdidSet 觀察器在屬性初始化過程當中不會被調用,它們只會當屬性的值在初始化以外的地方被設置時被調用。
  • 即便是設置的值和原來值相同,willSetdidSet 也會被調用。
相關文章
相關標籤/搜索