출처: Using Key-Value Observing in Swift - Apple Developer
객체에 프로퍼티의 변경 사항을 알리는 방법에 대해 알아봅니다.
Key-value Observing은 Cocoa 프로그래밍 패턴으로, 프로퍼티가 변경되면 이 사항을 다른 객체에 알리는 데에 사용됩니다. 모델과 뷰 처럼 기능적으로 분리되어 있는 부분에서 정보를 전달하기에 적합합니다.
KVO를 사용하기 위해서는 객체가 NSObject
를 상속받아야 합니다.
@objc dynamic var
@objc
와 dynamic
키워드를 같이 사용하여 KVO를 사용할 수 있도록 합니다.
class MyObjectToObserve: NSObject {
@objc dynamic var myDate = NSDate(timeIntervalSince1970: 0)
func updateDate() {
myDate = myDate.addingTimeInterval(Double(2 << 30))
}
}
observe(_:options:changeHandler:)
observe(_:options:changeHandler:)
와 Key Path를 통해 관측할 프로퍼티를 선택할 수 있습니다.
class MyObserver: NSObject {
@objc var objectToObserve: MyObjectToObserve
var observation: NSKeyValueObservation?
init(object: MyObjectToObserve) {
objectToObserve = object
super.init()
observation = observe(
\.objectToObserve.myDate,
options: [.old, .new]
) { object, change in
print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)")
}
}
}
options
: 관측할 시점입니다. 해당 파라미터를 비워 둘 경우 oldValue
와 newValue
를 반환합니다.
MyObjectToObserve의 인스턴스를 MyObserver의 생성자에 전달하면, 앞으로 MyObjectToObserve의 인스턴스가 변경될 때 마다 "myDate changed from: 1970-01-01 00:00:00 +0000, updated to: 2038-01-19 03:14:08 +0000"
와 같은 메시지가 출력될 것입니다.