[英]How is didSet and willSet implemented in Swift
我試圖了解 Swift 中 willSet 和 didSet 的實現。 我想知道無論如何,當一個 var 聲明如下時,swift 是否依賴於 Obj-C KVO 機制。 注意:這是在 Cocoa 應用程序中使用的。 我必須將 var 聲明為 @objc dynamic 以便將此 var 綁定到 UI 上的控件。
@objc dynamic var someString: String? = nil {
didSet {
self.doSomething()
}
}
willSet/didSet
和@objc dynamic
是兩個不同的東西。
willSet/didSet
是獨立於 KVO 的輕量級屬性觀察器。@objc dynamic
將屬性暴露給 Objective-C KVO。 可可綁定需要它不,他們不依賴 KVO。 為了證明這一點,讓我們看一下 didSet 和 willSet 是語法糖的代碼
var x = 0;
func setX(newX:Int):Int {
willSet()
x = newX
didSet()
}
無需為該 Swift 編寫上述所有樣板,只需在幕后生成類似的東西即可。 如果它有助於將 = 視為簡單的集合函數,它位於等號左側的任何內容上。 如果我在屬性上調用 = 它只是在該屬性上調用 set 函數。 當我在屬性上調用 = 時,Swift 會調用 didSet 和 willSet,如上所示。 確切的實現可能看起來有點不同,但上面的代碼片段至少應該讓你相信用 KVO 實現屬性觀察器是不必要的,如果你深入挖掘 swift 的源代碼,你會發現 didSet 和 willSet 和計算屬性本身只是上述代碼的語法糖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.