我有一个带有属性的实例,我想监听来自其他实例的更新。
例如类 Menu 有一个属性 badsCount,我想监听 badscount 的任何更新,例如当 badscount 更改时。我希望我的ViewController 在修改badgeCount 后有回调以了解实际数据。
目标是我可以将 KVO 用于列出的属性,我如何在 Swift 中使用 KVO。我是 Swift 新手。
最佳答案
如果你想在swift中使用KVO,有两个要求:
- 您想要执行 KVO 的类必须继承自 NSObject(或任何 NSObject 子类)
- 您需要观察的属性必须标记为
动态
代码示例是:
class Menu: NSObject {
dynamic var badgeCount: Int = 0
}
然后,您可以使用通常的 menuInstance.addObserver(self, forKeyPath: "badgeCount", options: NSKeyValueObservingOptions(), context: nil)
但是这个解决方案不太 swift 。
更好的解决方案是(不是详尽的列表):
使用 swift 的 didSet/willSet
来调用一些回调
class Menu {
var badgeCount: Int = 0 {
didSet {
badgeCountChangedListener(badgeCount)
}
}
init(badgeCountChangedListener: (Int -> Void)) {
self.badgeCountChangedListener = badgeCountChangedListener
}
private let badgeCountChangedListener: (Int -> Void)
}
使用RxSwift's 变量
类型
class Menu {
let badgeCount = Variable(0)
}
// and from where you observe
menuInstance.badgeCount.subscribeNext { badgeCount in
print(badgeCount)
}
关于objective-c - KVO 或如何在 Swift 中监听来自外部的属性更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35802715/