美文网首页
[Swift]Swift4.0的KVO

[Swift]Swift4.0的KVO

作者: AnnieAri | 来源:发表于2018-03-18 16:44 被阅读0次

    KVO原理及Objc的实现不再赘述
    简单说一下Swift4.0以后更为科学的KVO:
    官方文档:

    func observe<Value>(_ keyPath: KeyPath<EKInformationListController, Value>, options: NSKeyValueObservingOptions = default, changeHandler: @escaping (EKInformationListController, NSKeyValueObservedChange<Value>) -> Void) -> NSKeyValueObservation

    Description

    when the returned NSKeyValueObservation is deinited or invalidated, it will stop observing

    使用方法也很简单,比如我们监听某个view的frame:

    observation = xxview.observe(\UIView.frame, options: [.new]) { (_, change) in
                ///frame的类型时CGRect  不像原来从字典取值还需要转换
                let frame = change.newValue  
            }
    

    相较原来Objc的处理方式,Swift 4.0 KeyPath 有一下优势:

    • 1 原来的监听KeyPath使用的是字符串,有可能造成人为的错误
    • 2 设定观察和处理观察代码放在一起,代码维护难度降低;
    • 3 不需要使用context来区分是哪个观察量发生变化;
    • 4 处理时得到的是类型安全的结果,不是在字典中取值;
    • 5 observation被观察者持有,生命周期随着观察者的释放而结束,不像原来还需要寻找时机移除观察者

    毕竟是在Swift中使用,还是有一些限制的,如果相对我们自己写的类进行属性监听的话需要对属性使用dynamic 和 @objc 进行修饰,不过如果是对苹果原生的NSObject类监听的话,基本上是没有问题的

    相关文章

      网友评论

          本文标题:[Swift]Swift4.0的KVO

          本文链接:https://www.haomeiwen.com/subject/dmweqftx.html