美文网首页
Swift中的KVO

Swift中的KVO

作者: ChiralKing | 来源:发表于2020-09-19 18:29 被阅读0次
通知对象(观察者oberver)其他对象(被观察者observed)属性的更改

概述Key-Value Observing是一种Cocoa编程模式,用于通知对象关于其他对象属性的更改。它对于在应用程序的逻辑分离部分之间(例如modelview之间)传递更改非常有用。只能对继承自NSObject的类使用键值观察。

1.为你想要通过KVO观察的属性标记为@objc属性和dynamic动态修饰符。

class MyObjectToObserve: NSObject {
    @objc dynamic var myDate = NSDate(timeIntervalSince1970: 0)
    func updateDate() {
        myDate = myDate.addingTimeInterval(Double(2<<30))
    }
}

2.定义一个观察者observer,一个observer类的实例会管理一个或多个属性所做更改的信息,当您创建一个观察者时,您通过调用observe(_:options:changeHandler:)方法开始观察,该方法带有一个引用您想要观察的属性的keyPath

class MyObserver: NSObject {
    @objc var objectToObserver: MyObjectToObserve
    var observation: NSKeyValueObservation?
    
    init(object: MyObjectToObserve) {
        objectToObserver = object
        super.init()
        observation = observe(\.objectToObserver.myDate, options: [.old, .new], changeHandler: { (object, change) in
            print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)")
        })
    }
}

使用NSKeyValueObservedChange实例的oldValuenewValue属性来查看正在观察的属性发生了什么变化。
如果不需要知道属性是如何更改的,请忽略options参数。省略options参数将放弃存储新和旧属性值,这将导致oldValuenewValue属性为nil
3.将观察者和观察的属性进行关联,通过将对象传递给观察者的初始化器,你可以将你想要观察的属性与其观察者关联起来:

let observed = MyObjectToObserve()//被观察者
let observer = MyObserver(object: observed)//观察者

4.响应属性更改。被设置为使用KVO的对象(如上面的observe)通知其观察者属性更改。下面的示例通过调用updateDate方法更改myDate属性。这个方法调用会自动触发观察者的变更处理程序:

observed.updateDate()

相关文章

  • swift-kvo

    swift中kvo的使用

  • swift中KVO和属性观察器

    开篇提醒:OC中的KVO及其KVO的基础知识可参见:深入runtime探究KVO Swift中,原本没有KVO模式...

  • Swift4 - KVO的浅析

    SWIFT4.0中的KVO 在swift4.0 中 KVO 出现了变更,添加了监听回调.变得更加简单易用.同时会自...

  • [Swift Tips 读书笔记]从 Objective-C 到

    KVO 局部 scope 判等 哈希 类簇 调⽤ C 动态库 -- KVO Swift中KVO使用条件 :NSOb...

  • 417,Swift 怎么实现KVO(面试点:基于NSObject

    一、KVO kvo键值观察者 Swift继承NSObject的KVO swift 实现kvo需要两个条件,第一要是...

  • Swift中的KVO

    class People: NSObject { var date = NSDate() var interval...

  • Swift 中的KVO

    基本类型的监听 包括String、Int、数组等等 Person为被监听的对象,name被监听的属性 KVO是基于...

  • Swift中的KVO

    通知对象(观察者oberver)其他对象(被观察者observed)属性的更改 概述:Key-Value Obse...

  • swift中的KVO

    基本类型的监听 包括String、Int、数组等等 Person为被监听的对象,name被监听的属性 KVO是基于...

  • swift中的KVO

    swift中也可以使用KVO,但是有限制的 1.必须继承自NSObject 2.被观察的属性必须用@objc和dy...

网友评论

      本文标题:Swift中的KVO

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