当模型对象发生变化时,我需要使用属性观察器来更新我的视图。我认为这是一个很好的非突兀的方法,特别是因为我需要更新的视图不在执行更改的代码范围内。
我只是添加了一个像这样的观察者:
someObject.addObserver(observer, forKeyPath:"name", options:NSKeyValueObservingOptions.New, context:nil)
然后在" observer"
中实现此方法override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
// Do my thing
}
由于某种原因,这个iOS观察者API感觉有些过时了。所以我想知道:这仍然是iOS的发展方向吗?或者现在是否有更好的替代方案来实现这种观察者/可观察的模式?
编辑:看起来财产观察员(KVO)甚至不和Swift合作。所以无论哪种方式,我都需要另一种方法
答案 0 :(得分:1)
如果你想尝试新的东西,从KVO开始,那么就开辟了一个充满可能性的世界,考虑一下功能反应式编程和ReactiveCocoa。
除了我上面链接的GitHub回购(完整的documentation),你可以在网上找到很多介绍性的教程,例如:
这项技术已在多个项目中成功使用,您可以在线找到大量令人振奋的代码示例。
仅供参考,使用ReactiveCocoa的一个很酷的现实生活项目是Artsy Eidolon project。
答案 1 :(得分:0)
属性观察者确实存在于Swift中,并且在属性值发生变化时大量用于观察和行动,绝对优于KVO。 Swift 4
示例1
var yourProperty: String = "" {
didSet {
updateView()
}
}
示例2:
var viewModel: PhotoViewModel {
didSet {
collectionView.reloadData()
}
}