KVO系统由NSObject
实现,所有NS类均可直接使用监听。
注册监听器:
由于所有NSObject
对象均实现KVO系统,因此可直接在任何对象上调用函数,并传入self
作为observer
对象。
addObserver(observer: NSObject, forKeyPath keyPath: String, options: NSKeyValueObservingOptions, context: UnsafeMutablePointer<Void>)
移除监听器:
目标对象未曾注册为监听器时,调用该移除函数会导致error错误。
另外,必须确保在注册监听器时所用对象在被销毁前调用移除函数。
removeObserver(observer: NSObject, forKeyPath keyPath: String)
监听:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if object is 目标Class && keyPath == 监听中的keyPath {
// 类型转换
if let statusValue = change?[NSKeyValueChangeNewKey] as? Int {
if let status = 目标枚举Class(rawValue: statusValue){
switch status {
case 目标枚举Class.枚举量A:
break
...
}