更安全的 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 工作时创建。