티스토리 뷰
https://developer.apple.com/documentation/swift/using-key-value-observing-in-swift
Using Key-Value Observing in Swift
다른 객체의 속성 변경 내용을 객체에 알립니다.
Overview
Key-value observing은 프로퍼티 변경 내용을 알리는 코코아 프로그래밍 패턴입니다.
앱에서 논리적으로 분리된 파트와 변화를 커뮤니케이팅하기에 좋습니다. (예를 들면 모델과 뷰)
Key-value observing는 NSObject를 상속한 클래스에서만 가능합니다.
Annotate a Property for Key-Value Observing
관찰하고자하는 프로퍼티에 @objc 와 dynamic 을 붙여줍니다.
예시
myDate 옵저빙할 프로퍼티
class MyObjectToObserve: NSObject {
@objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970
func updateDate() {
myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years.
}
}
Define an Observer
옵저버 클래스의 인스턴스는 하나 이상의 프로퍼티가 만드는 변화에 대한 정보를 관리합니다.
옵저버를 만들고 관찰하고자하는 프로퍼티를 지칭하는 key path와 함께 observe(_: options: changeHandler:) 메서드를 호출해서 관찰을 시작합니다.
예시
MyObjectToObserve의 myDate프로퍼티를 \.objectToObserve.myDate 키패스가 지칭합니다.
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!)")
}
}
}
oldValue와 newValue 프로퍼티로 변화를 확인할 수 있습니다.
어떻게 변했는지 알고싶지 않으면 option을 빼면됩니다.
options 파라미터를 누락하면 oldValue, newValue가 nil이됩니다.
Associate the Observer with the Property to Observe
관찰하고자하는 프로퍼티를 옵저버에 객체를 전달해서 옵저버와 연결시킵니다.
let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)
Respond to a Property Change
key-value observing을 사용하도록 설정된 객체는 옵저버에게 프로퍼티 변경 사항을 알립니다.
아래 예제에서는 updateDate 메서드를 호출하여 myDate 속성을 변경합니다.
이 메서드 호출은 관찰자의 change handler를 자동으로 트리거합니다.
'Swift' 카테고리의 다른 글
[Swift] Concurrency(1) - Concurrency란 (0) | 2022.12.14 |
---|---|
[Swift] Improving Build Efficiency with Good Coding Practices 번역 (0) | 2022.10.02 |
[Swift] WWDC21 : ARC in Swift: Basics and beyond 한글 정리 (0) | 2022.04.14 |
[Swift] WWDC async/await 정리 (0) | 2022.04.13 |
[Swift] break vs continue 차이 (0) | 2022.04.08 |