【发布时间】:2018-11-15 17:37:48
【问题描述】:
一段时间以来,我一直在使用 willSet 和 didSet 来处理变量。它用于在变量更改前后收到通知并执行一些操作。
我最近遇到了 KVO,它做类似的事情,但设置步骤更少。
- 这两种方法有什么区别吗?
- 一个比另一个有什么优势吗?
【问题讨论】:
-
willSet和didSet实际上是 KVO,它只是让 KVO 更易于使用的 swift 功能 -
@Tj3n 并非如此,KVO 需要 Obj-C 运行时来进行 ISA swizzling;
willSet和didSet只是作为 Swift 属性设置器的一部分调用的函数。因此,它们可以在没有 Obj-C 运行时的情况下使用(例如,在结构中、在 Obj-C 中不可表示的类属性上,以及更普遍地跨非 Apple 平台)。