[ SWIFT ] Key Value Observing
on Swift
Key-Value Observing은 객체에 옵저버 패턴을 적용하는 하나의 방식이며 아래와 같은 특징이 있다.
- 옵저빙하고자 하는 객체는 NSObject를 상속받아야 한다.
- 옵저빙하는 객체에 알람을 등록할 시 식별자는 객체의 KeyPath를 사용한다.
- 구현해야할 이벤트 핸들러는 NSObject의 observeValue 메소드를 재정의해서 사용한다.
KeyPath는 옵저빙할 객체의 property를 문자열 형태로 표현한 것이다. 예를들어 UIView 인스턴스의 frame값을 옵저빙하고 싶을때 KeyPath는 “instance명.frame”이 되는 것이다. keyPath매크로를 이용해서 #keyPath(instance명.frame)으로 표현할 수도 있다.
KVO를 객체에 적용하는 방법을 아래와 같이 Observer 등록, 이벤트 핸들러 구현 두 단계로 진행된다.
Observer 등록하기
addObserver(self, forKeyPath: #keyPath(self.view.frame), options: [.old, .new], context: nil)
Event Handler등록하기
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(self.view.frame) {
// frame이 변경될 때 하고자 하는 작업
}
}