티스토리 뷰

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를 자동으로 트리거합니다.

댓글
공지사항