swift之KVO观察者属性

已经好一段时间没有写iOS了,我决定不能忘了这个技能,每天拿出一点时间来学习一下苹果方面的知识,KVO观察者这个东西能提供一种简单的方法实现两个对象间的同步,model和view之间同步等吧。还可以用key paths来观察属性,因此也可以观察嵌套对象。

那么我为什么要学习kvo呢 ?因为苹果新出的WKWebView对h5兼容、性能以及新特性的支持还有自带的内置手势,总之如果用WKWebView来实现js的交互会有一种原生的效果吧 !!我觉得是这样!WKWebView与h5之间的交互就用到了kvo这种监听方式。

自己百度查阅了一下kvo的方法,动手写了一个小demo 给大家分享一下:


swift之KVO观察者属性_第1张图片
调用创建的类



在 Swift 中使用 KVO 的前提条件:1.观察者和被观察者都必须是 NSObject 的子类;2.观察的属性需要使用 @dynamic 关键字修饰。

这里呢我特地查阅了一下,苹果为什么要@dynamic来修饰才能进行KVO,@dynamic表示该属性的存取都由 runtime 在运行时来决定,由于 Swift 基于效率的考量默认禁止了动态派发机制,因此要加上该修饰符来开启动态派发;除此之外,在 NSObject 子类中几乎没有属性默认是使用 @dynamic 修饰(该关键字最常见场景是在 Core Data 里,NSManagedObject子类的属性都是 dynamic 的),所以若想对某个属性进行观察,还必须在当前的子类中 override 该属性,override 时,采用 super 的实现即可。

必须是NSObject:观察者和被观察者都必须是 NSObject 的子类,因为 OC 中KVO的实现基于 KVC 和 runtime 机制,只有是 NSObject 的子类才能利用这些特性

具体的可以看http://www.jianshu.com/p/e036e53d240e

swift之KVO观察者属性_第2张图片
if let where 查阅了一下发现是一个非常实用的一个小tip吧,作用就是双重if ,简化了代码,相当于if let change = change {if context == &mycontext{ print()}}  在这里简单的写了一下

记得以前用delegate 跟通知的时候就算没有deinit 也不会报错,但是今天在写的KVO的时候也没有写 (懒了) 哈哈 !! 最后报了错误!所以大家记得注销监听哟  

希望明天有空能把WKWebView的交互学会分享给大家吧  !!

希望本片博客可能帮助到那些需要帮助的人!!!

每天更新学到的东西!学无止境!!!!

本文原创   转载注明出处

你可能感兴趣的:(swift之KVO观察者属性)