衆所周知,當然,Set不會在didSet中再次運行同一個對象。 (example)內在的保護奇怪地延伸到全班?
但是,看起來:該限制不僅適用於該對象,也可能適用於同一類別的任何對象。
這裏是複製粘貼測試用例的Playground。
class C {
var Test: Bool = false {
didSet {
print("test.")
for c in r {
c.Test = true
}
}
}
var r:[C] = []
}
var a:C = C()
var b:C = C()
var c:C = C()
a.r = [b, c]
a.Test = false
不行!
class C {
var Test2: Bool = false {
didSet {
print("test2.")
global.Test2 = true
}
}
}
var global:C = C()
var a:C = C()
a.Test2 = false
不行!
這是一個Swift錯誤嗎?
如果不是,什麼是實際限制?它不會運行從didSet開始的任何didSet(任何)?同一個班級?同一個超類?要麼?
doco中的解釋在哪裏?
WTF。人們需要知道......具體的限制是什麼?
從理論上講,其中一個孩子可能是自己的。意味着無限循環仍然可能發生。可能是一個錯誤,可能是一個功能它不是一個答案,因此它在評論中的原因:) – PeejWeej
@JoeBlow:這個評論[Swift源代碼](https://github.com/apple/swift/blob /master/lib/AST/Decl.cpp#L1072)可能是相關的:*「觀察成員可以直接從它們的didSet/willSet指示符中進行訪問,這樣可以防止賦值成爲無限循環。」*您也可以嘗試在swift用戶郵件列表,來自Swift團隊的人員經常提供幫助。 –
這看起來像一個相同的問題:[爲什麼沒有無限循環在didSet?](http://stackoverflow.com/questions/29363170/why-no-infinite-loop-in-didset)。 –