我有一个带有属性的实例,我想从其他实例中侦听更新。
例如,类Menu具有属性badgeCount,我想监听badgeCount的任何更新,例如当更改badgeCount时。我希望我的ViewController在修改badgeCount后知道实际数据后进行回调。
在目标是我可以用于列出属性的KVO,我怎样才能在Swift中使用KVO。我是斯威夫特的新人。
答案 0 :(得分:3)
如果你想在swift中使用KVO,有两个要求:
dynamic
代码示例如下:
class Menu: NSObject {
dynamic var badgeCount: Int = 0
}
然后,您可以使用通常的menuInstance.addObserver(self, forKeyPath: "badgeCount", options: NSKeyValueObservingOptions(), context: nil)
但是这个解决方案不是很 swifty 。
更好的解决方案(不是详尽的清单):
使用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 Variable
类型
class Menu {
let badgeCount = Variable(0)
}
// and from where you observe
menuInstance.badgeCount.subscribeNext { badgeCount in
print(badgeCount)
}