是否在更改属性后调用它(意味着属性setter已从调用堆栈中弹出)或属性setter正在执行?
斯威夫特非常方便"Property observers"
。 Obj-C对KVO有类似的东西吗?
答案 0 :(得分:3)
这取决于添加观察者时使用的选项。如果观察者添加了NSKeyValueObservingOptionPrior
,则在更改属性之前和之后都会调用-observeValueForKeyPath:...
。或者,更准确地说,它在-willChange...
期间和-didChange...
方法期间都会被调用。
如果使用<{1}} ,则仅在更改属性后调用NSKeyValueObservingOptionPrior
。 (在-observeValueForKeyPath:...
方法期间。)
Swift财产观察员与KVO并不相似。相反,它们更像是自己实现属性设置器(或者在子类中覆盖它),并在实际更改支持该属性的实例变量之前和/或之后执行某些操作(或调用到超级)。
我建议不要编写一个在自己的属性上使用KVO来响应更改的类。相反,它应该实现setter在属性更改时执行某些操作。
答案 1 :(得分:-2)