更安全的 KVO。
示例
let kvObserver = KVObserver()
let observedObject = ObservedObject()
/* Start observing observedObject */
let observingId = kvObserver.observe(object: observedObject, keyPath: #keyPath(ObservedObject.observableProperty), kvoOptions: [.initial], dispatchType: .asyncOnMainQueueDirectInitial, handler: { [weak self] change in
/* Handle changes here */
})
/* End observing observedObject */
kvObserver.stopObserving(id: observingId)
/* Or, stop observing everything */
kvObserver.stopObservingEverything()
有许多可用的调度类型,它们都有细微的差别。通常你只需要默认的那个:.asyncOnMainQueueDirectInitial
。这将同步地调度初始的 KVO 触发(如果存在初始触发,即如果设置了 .inital
KVO 选项),并进一步在主线程上异步地调度 KVO 触发。
请随时阅读代码以了解其他调度类型!所有类型都有文档记录。甚至还有专门用于 CoreData 的调度类型。
KeyPath
这个项目最初由 François Lamboley 在 happn 工作时创建。