1. KVC란?
KVC, Key-Value Coding
- KVC란, 객체의 값을 직접 가져오지않고, Key 또는 KeyPath 를 이용해서 간접적으로 데이터를 가져오거나 수정하는 방법
struct Person {
var name : String
}
var person = Person(name:"lee")
// 객체의 값 직접 가져오기
let myName = person.name
// KeyPath 를 이용해서 데이터를 가져오기
let nameKeyPath = \\.Person.name
let myName = person[keyPath: nameKeyPath]
Key Path를 만드는법
Key Path 종류
- KeyPath
- Read-only
- WritableKeyParh
- value type 인스턴스에 사용 가능.
- 변경 가능한 모든 프로퍼티에 대한 read & write access 제공
- ReferenceWritableKeyPath
- 클래스의 인스턴스에 사용 가능.
- 변경 가능한 모든 프로퍼티에 대한 read & write access 제공.
2. KVO란?
KVO, Key-Value Observing
- Key-Value Observing의 약자
- 객체의 프로퍼티의 변경사항을 다른 객체에 알리기 위해 사용하는 코코아 프로그래밍 패턴
- NSObjec를 상속한 클래스에서만 KVO를 사용할 수 있음.
Observer 만들기
struct Person : NSObejct {
@objc dynamic var name : String
init(name : String) {
self.name = name
}
}
var person = Person(name:"lee")
let observer = person.observe(\\.name, options:[.old, .new]) { (object, change) in
print(change.oldValue)
print(change.newValue)
}
- 관찰하고 싶은 프로퍼티의 객체는 NSObject를 상속해야한다
- 관찰하고 싶은 프로퍼티에 @objc attribute와 dynamic modifier를 추가해야한다
- KeyPath를 사용하여 프로퍼티 KeyPath에 observer를 추가
- 프로퍼티에 변경사항이 생기먄 observer의 change handler가 호출된
참고
'iOS 🍎 > Swift' 카테고리의 다른 글
접근제어, Access control (0) | 2021.12.28 |
---|---|
Method Dispatch (0) | 2021.12.06 |
Swift - 고차함수, Higher-order function (0) | 2021.02.10 |
Swift19 - 익스텐션 (0) | 2021.02.10 |
Swift18 - 프로토콜 (0) | 2021.02.10 |