Swift 정리 - KVO

김세영·2022년 5월 16일
0

Doc - Article 정리

목록 보기
3/4
post-thumbnail

출처: Using Key-Value Observing in Swift - Apple Developer

객체에 프로퍼티의 변경 사항을 알리는 방법에 대해 알아봅니다.

Key-value Observing은 Cocoa 프로그래밍 패턴으로, 프로퍼티가 변경되면 이 사항을 다른 객체에 알리는 데에 사용됩니다. 모델과 뷰 처럼 기능적으로 분리되어 있는 부분에서 정보를 전달하기에 적합합니다.
KVO를 사용하기 위해서는 객체가 NSObject를 상속받아야 합니다.

@objc dynamic var

@objcdynamic 키워드를 같이 사용하여 KVO를 사용할 수 있도록 합니다.

class MyObjectToObserve: NSObject {
    @objc dynamic var myDate = NSDate(timeIntervalSince1970: 0)
    
    func updateDate() {
        myDate = myDate.addingTimeInterval(Double(2 << 30))
    }
}

observe(_:options:changeHandler:)

observe(_:options:changeHandler:)와 Key Path를 통해 관측할 프로퍼티를 선택할 수 있습니다.

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!)")
        }
    }
}

options: 관측할 시점입니다. 해당 파라미터를 비워 둘 경우 oldValuenewValue를 반환합니다.

MyObjectToObserve의 인스턴스를 MyObserver의 생성자에 전달하면, 앞으로 MyObjectToObserve의 인스턴스가 변경될 때 마다 "myDate changed from: 1970-01-01 00:00:00 +0000, updated to: 2038-01-19 03:14:08 +0000" 와 같은 메시지가 출력될 것입니다.

profile
초보 iOS 개발자입니다ㅏ

0개의 댓글