KVO

KVO는 A객체에서 B객체의 키의 값이 변화됨을 감지할 수 있는 패턴이다. KVO 패턴은 객체와 객체 사이의 관계를 다룰 때 적합하다.

동작

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"

[WWDC17] Swift 4 에서 KVC 사용하기

Key Paths

Untitled