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
...
}