iOS 기본 (swift)
[iOS - swift] KVO(Key-Value Observing)
jake-kim
2021. 3. 7. 20:28
KVO(Key-Value Observing)
- 특정 키의 값의 변화를 감지하기 위한 기능
- `변수`에 코드를 붙여 변수가 변경될 때마다 코드가 실행되도록 하는 방법
- Property Observers(willSet, didSet)과 유사하지만 KVO는 타입 정의 밖에서 observe를 추가한다는 점의 차이가 존재
(Objective-c 런타임에 의존하기 있기 때문) - 사용할 땐 NSObject를 상속받기 위해 @objc dynamic를 반드시 붙여줘야 가능
(dynamic 키워드: Objsective-c 문법의 하나로, 특정 method의 구현을 objective-런타임에서 dynamic dispatch를 활성화 - Dynamic dispatch: 키 패스(KeyPath = \.) 이름을 이용해 프로퍼티의 주소를 찾게 하는 기능)
키 패스 (KeyPath)
- 프로퍼티나 메소드등을 특정문자열로 표기하는 규칙
("value"라는 문자열을 넘겨주면 특정 클래스 오브젝트의 value라는 프로퍼티를 의미하는 것)
KVO 사용 방법
- KVO기능은 NSObject에 지정되어 있기 때문에 NSObject를 상속받은 클래스에만 적용가능
- 참고로, NSObject라는 무거운 것을 상속받아야 하므로 swift에서는 KVO를 쓰지 않는것이 좋음
class MyClass: NSObject {
@objc dynamic var testStr: String = "init--"
}
- observe()함수 호출하여 이벤트 구독
myClass.observe(\.testStr, options: [.new, .old]) { (object, chnage) in
print("change event old => \(chnage.oldValue ?? "")")
print("change event new => \(chnage.newValue ?? "")")
}
- 값 대입 시 이벤트 발생
self.myClass.testStr = "test1"
self.myClass.testStr = "test2"