KVC(Key-Value Coding)
- 특정 문자열(keyPath)을 통해 프로퍼티에 접근가능한 방법
- 객체의 값을 직접 가져오지 않고, Key 또는 KeyPath를 통해 간접적으로 데이터를 가져오는 방법
struct Rectangle {
var size: Int
}
struct Figure {
var division: Rectangle
}
let rectangle = Rectangle(size: 20)
var figure = Figure(division: rectangle)
figure[keyPath: \.division.size] // 20
figure[keyPath: \.division.size] = 10 // 10
KeyPath 생성
let figureKeyPath = \Figure.division.size
figure[keyPath: figureKeyPath] // 20
KeyPath 종류
- KeyPath : Read only
- WritableKeyPath : value type 인스턴스에서 사용, read & write 접근 가능
- ReferenceWritableKeyPath : 클래스의 인스턴스에서 사용. read & write 접근 가능
KVO(Key-Value Observing)
- 객체의 프로퍼티가 변경되는 것을 알고 싶을 때 사용
- NSObject를 상속하는 클래스에서만 사용 가능
- ex) View와 ViewModel간의 상태에따른 객체의 변경사항을 알릴때 사용
class Rectangle: NSObject {
@objc dynamic var size: Int
init(size: Int) {
self.size = size
}
}
KVO와 프로퍼티 감시자(Property Observers)의 차이
타입을 직접 만들때는 프로퍼티 감시자를 통해(willSet, didSet) 직접 구현해줄 수 있지만 외부 라이브러리에서 정의한 타입은
재정의가 불가능 하기 때문에 이때 KVO를 사용하여 프로퍼티의 값이 변경되는지 확인할 수 있다.
KVO는 상속 및 재정의없이 Observing이 가능하다.
'swift' 카테고리의 다른 글
Method Swizzling (0) | 2021.12.10 |
---|---|
Layout Update Method (0) | 2021.12.09 |
Properties (0) | 2021.12.08 |
ARC(Auto Reference Count) (0) | 2021.12.07 |
Strong, Weak, Unowned, 순환참조 (0) | 2021.12.07 |