我观看了一个关于swift基础知识的教程,并且传递了一个评论,即属性观察者无法添加到惰性属性中,但没有给出任何理由。为什么会这样?
答案 0 :(得分:2)
文档确实证实了这一点("您可以将属性观察者添加到您定义的任何存储属性,除了延迟存储的属性"(source))但它们不提供基本原理。 / p>
我猜想,属性观察者必须访问他们观察到的属性,以便将自己作为一个观察者附加,尽管它并没有感觉到#39;像你一样。再次,这只是一个猜测,但如果我是正确的,那么显然有一个懒惰的属性是无关紧要的。首次访问时会计算延迟属性,如果使用观察者访问该属性,则会立即计算它,这首先完全违背了它的目的。
答案 1 :(得分:0)
final class A {
init() {
print("!")
}
}
final class B {
lazy var a = A()
}
B().a = A()
您只会得到一个“!”作为此处的输出。我的猜测是,允许didSet
会使这种情况更加复杂。