[英]Swift property observer in protocol extension?
考慮以下:
protocol ViewControllable: class {
typealias VM: ViewModellable
var vm: VM! { get }
func bind()
}
extension ViewControllable {
var vm: VM! {
didSet {
bind()
}
}
}
我正在嘗試觀察vm
屬性並在注入時調用bind
。 但這不會編譯錯誤說:
擴展名可能不包含存儲的屬性
這是有道理的,因為協議不能強制stored
或computed
屬性。
這可以在不引入class inheritance
情況下完成嗎?
換句話說, 我可以觀察協議擴展內屬性的變化嗎?
不,這是明確禁止的。 請參閱擴展:計算屬性 :
擴展可以添加新的計算屬性,但不能添加存儲的屬性,也不能將屬性觀察者添加到現有屬性。
請記住,如果這是合法的,它會增加一些關於執行順序的非平凡的混淆。 想象一下,有幾個擴展添加了didSet
,實際的實現也有一個didSet
。 他們應該訂購什么訂單? 這並不意味着它不可能實現,但如果我們擁有它可能會有點令人驚訝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.