반응형
카테고리 | 게시글 작성 날짜 | 게시글 최근 수정 날짜 | 작성자 |
iOS | 2022.01.24. 11:09 | 2022.01.24. 11:09 | Dev.Yang |
🛠 Key-Value Observing
객체 프로퍼티의 변경에 관하여 다른 객체에게 알림을 주는 코코아 프로그래밍 패턴입니다.
(Notify objects about changes to the properties of other objects)
- NSObject를 상속하는 Class만이 사용이 가능합니다.
- 프로퍼티 (Property)에 대한 변경 알림을 등록하고자 하는 경우에는 @objc dynamic 키워드를 지정하여야 합니다.
- NSObject 상속하기에 Objective-C Runtime 의존적이라는 단점을 가지고 있습니다.
- 두 객체 간의 동기화 작업에 유용하게 사용이 되며 다른 객체의 내부 상태 변환을 알기 위하여 추가적인 구현 또는 변경이 필요하지 않는 장점을 가지고 있습니다.
🧩 NSKeyValueObservingOptions 관련 옵션
- static var new: NSKeyValueObservingOptions - 새로운 속성 값을 가져올 수 있는 옵션 (Indicates that the change dictionary should provide the new attribute value, if applicable)
- static var old: NSKeyValueObservingOptions - 새로운 속성 직전의 값을 가져올 수 있는 옵션 (Indicates that the change dictionary should contain the old attribute value, if applicable)
- static var initial: NSKeyValueObservingOptions - 생성자를 통하여 초기화 값을 가져올 수 있는 옵션 (If specified, a notification should be sent to the observer immediately, before the observer registration method even returns)
- static var prior: NSKeyValueObservingOptions - 모든 상태 값을 가져올 수 있는 옵션 (Whether separate notifications should be sent to the observer before and after each change, instead of a single notification after the change)
🛠 Key-Value Observing Example Source Code
class MyObjectToObserve: NSObject {
@objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970
func updateDate() {
myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years.
}
}
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!)")
}
}
}
let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)
🚀 REFERENCE
반응형
'# 애플 [Apple] > iOS' 카테고리의 다른 글
[iOS] Xcode를 통하여 Swift 언어에서 C/C++ 사용하기 (How to call C/C++ code from Swift) (0) | 2022.02.07 |
---|---|
[iOS] KVC (Key-Value Coding) (0) | 2022.01.25 |
[iOS] 델리게이트 패턴 (Delegate Pattern) (0) | 2022.01.20 |
[iOS] Kakao 로컬(Local) API를 사용하여 좌표로 주소 변환하기 (0) | 2022.01.01 |
[iOS] 픽셀 (Pixel)과 포인트 (Point) (0) | 2021.12.05 |
댓글