본문 바로가기
iOS 🍎/Swift

KVO, Key-Value Observing

by yongmin.Lee 2021. 12. 6.

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 종류

  1. KeyPath
    1. Read-only
  2. WritableKeyParh
    1. value type 인스턴스에 사용 가능.
    2. 변경 가능한 모든 프로퍼티에 대한 read & write access 제공
  3. ReferenceWritableKeyPath
    1. 클래스의 인스턴스에 사용 가능.
    2. 변경 가능한 모든 프로퍼티에 대한 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)
}
  1. 관찰하고 싶은 프로퍼티의 객체는 NSObject를 상속해야한다
  2. 관찰하고 싶은 프로퍼티에 @objc attribute와 dynamic modifier를 추가해야한다
  3. KeyPath를 사용하여 프로퍼티 KeyPath에 observer를 추가
  4. 프로퍼티에 변경사항이 생기먄 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