KVO는 A객체에서 B객체의 키의 값이 변화됨을 감지할 수 있는 패턴이다. KVO 패턴은 객체와 객체 사이의 관계를 다룰 때 적합하다.
@objc
를 반드시 붙여줘야 한다. 특히 KVO는 각 속성에 @objc dynamic
을 붙여줘야 함class MyObjectToObserve: NSObject {
// 1970
@objc dynamic var myDate = NSDate(timeIntervalSince1970: 0)
func update() {
// Adds about 68 years.
myDate = myDate.addingTimeInterval(Double(2 << 30))
}
}
Observer 정의
class MyObserver: NSObject {
@objc var objectToObserve: MyObjectToObserve
var observation: NSKeyValueObservation?
init(object: MyObjectToObserve) {
self.objectToObserve = object
super.init()
observation = observe(\\.objectToObserve.myDate,
options: [.old, .new]
) { object, change in
print("myDate changed from: \\(change.oldValue!), updated to: \\(change.newValue!)")
}
}
}
update() 호출
let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)
observed.update()
// Prints "myDate changed from: 1970-01-01 00:00:00 +0000, updated to: 2038-01-19 03:14:08 +0000"