财产观察员(KVO):他们还有出路吗?

时间:2015-01-28 08:20:53

标签: ios objective-c swift

当模型对象发生变化时,我需要使用属性观察器来更新我的视图。我认为这是一个很好的非突兀的方法,特别是因为我需要更新的视图不在执行更改的代码范围内。

我只是添加了一个像这样的观察者:

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合作。所以无论哪种方式,我都需要另一种方法

2 个答案:

答案 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()
   }
}