为什么不能将属性观察者添加到惰性属性中?

时间:2015-04-09 16:05:26

标签: ios swift

我观看了一个关于swift基础知识的教程,并且传递了一个评论,即属性观察者无法添加到惰性属性中,但没有给出任何理由。为什么会这样?

2 个答案:

答案 0 :(得分:2)

文档确实证实了这一点("您可以将属性观察者添加到您定义的任何存储属性,除了延迟存储的属性"(source))但它们不提供基本原理。 / p>

我猜想,属性观察者必须访问他们观察到的属性,以便将自己作为一个观察者附加,尽管它并没有感觉到#39;像你一样。再次,这只是一个猜测,但如果我是正确的,那么显然有一个懒惰的属性是无关紧要的。首次访问时会计算延迟属性,如果使用观察者访问该属性,则会立即计算它,这首先完全违背了它的目的。

答案 1 :(得分:0)

final class A {
    init() {
        print("!")
    }
}

final class B {
    lazy var a = A()
}

B().a = A()

您只会得到一个“!”作为此处的输出。我的猜测是,允许didSet会使这种情况更加复杂。