-
[Swift] Key Value Observing (KVO)Swift 2022. 3. 24. 09:32
Key Value Observing (KVO)
- A κ°μ²΄μμ B κ°μ²΄μ νλ‘νΌν°κ° λ³νλ¨μ κ°μ§ν μ μλ ν¨ν΄
- KVO ν¨ν΄μ κ°μ²΄μ κ°μ²΄ μ¬μ΄μ κ΄κ³λ₯Ό λ€λ£¨λλ° μ ν©νλ€.
- λ©μλλ λ€λ₯Έ μ‘μ μμ λνλλ κ²μ΄ μλ νλ‘νΌν°μ μνμ λ°μνλ ννμ΄λ€.
- νμ μ μ μΈλΆμ μ΅μ λ²λ₯Ό μΆκ°νλ κ²μ μ μΈνλ©΄, property observer (willSet, didSet)κ³Ό μ μ¬νλ€.
- Dynamic Dispatch
- ν€ ν¨μ€ (KeyPath = \.) μ΄λ¦μ ν΅ν΄ νλ‘νΌν°μ μ£Όμ μ°Ύλ κΈ°λ₯
- ν€ ν¨μ€λ νλ‘νΌν°λ λ©μλ λ±μ νΉμ λ¬Έμμ΄λ‘ νκΈ°νλ κ·μΉμ΄λ€.
μ¬μ©λ²
1. μ μΈ
class Person: NSObject { @objc dynamic var name = "Selina" }2. observe() νΈμΆνμ¬ μ΄λ²€νΈ ꡬλ
μλ‘μ΄ κ°μ΄ λ€μ΄μ€κ² λλ©΄, κ·Έ μ¦μ μ΄λ¦μ μΆλ ₯νλ€.
let person = Person() person.observe(\\Person.name, options: .new) { person, change in print("I'm now called \\(person.name)") }3. λ€λ₯Έ μ΄λ¦μΌλ‘ λ³κ²½νκΈ°
μλμ²λΌ λ³κ²½νλ©΄, μ΄μ "I'm now called TAEYEON"μ΄ μΆλ ₯λ κ²μ΄λ€.
person.name = "TAEYEON"Options
- old : λ³κ²½ μ μ κ°μ dictionaryλ‘ λ΄λλ€.
- new : λ³κ²½ νμ κ°μ dictionaryλ‘ λ΄λλ€.
- initial : μ΅μ λ² λ±λ‘ λ©μλκ° λ¦¬ν΄λκΈ° μ μ μ΅μ λ²μκ² μλ¦Όμ μ μ‘νλ€.
- prior : λ³κ²½ λ°μ μ, λ¨μΌ μλ¦Ό λμ λ³κ²½ μ νμ μλ¦Όμ λ³λλ‘ λ³΄λΈλ€.
μ₯μ
- Modelκ³Ό Viewμ κ°μ΄ λ Όλ¦¬μ μΌλ‘ λΆλ¦¬λ ννΈ κ°μ λ³κ²½μ¬νμ μ λ¬νλλ° μ μ©νλ€.
- λ κ°μ²΄ μ¬μ΄μ μ 보λ₯Ό λ§μΆ°μ£Όλ κ²μ΄ μ½λ€.
- new/old valueλ₯Ό μ½κ² μ»μ μ μλ€.
- key pathλ‘ observingνκΈ° λλ¬Έμ nested objects λν observingν μ μλ€.
λ¨μ
- Objective-C λ°νμμ μμ‘΄νκΈ° λλ¬Έμ μμν Swift μ½λμμλ κ·Έλ€μ§ μ’μ§ μλ€.
- NSObjectλ₯Ό μμλ°λ ν΄λμ€μμλ§ μ¬μ©κ°λ₯νλ€.
- objc dynamic μμ±μ λΆμ¬μ€μΌνλ€.
- deallocν λ μ΅μ λ²λ₯Ό μ§μμ€μΌνλ€.
- λ§μ valueλ₯Ό κ°μ§ν λμλ λ§μ μ‘°κ±΄λ¬Έμ΄ νμνλ€.
- μ νμ ν₯ν UIKitκ³Ό KVOμ νΈνμ±μ λν΄ λ³΄μ₯νμ§ μλλ€.
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") μ΄μ ν΄κ²° (0) 2023.04.04 [κΈ°ν] μ κ· ννμ (Regex) (0) 2022.03.31 [Swift] Type Alias (typealias) (νμ λ³μΉ μ μΈ) (0) 2022.03.23 [Swift] Delegate, Notification, KVO (0) 2022.03.15 [Swift] Copy On Write (COW) (0) 2022.03.03