众所周知,当然,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)。 –