-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
KVO 동작 방식에 대해 설명하시오. #13
Labels
Swift
Swift CS 개념 공부
Comments
KVO 동작 방식에 대해 설명하시오.KVO 이란?
KVO 사용 방법
class Person: NSObject {
let name: String
@objc dynamic var age: Int
@objc dynamic var car: String = "BMW"
init(name: String, age: Int, car: String) {
self.name = name
self.age = age
self.car = car
}
}
var jenny: Person = Person(name: "jenny", age: 20, car: "아반떼")
jenny.observe(\.car, options: [.old, .new, .initial, .prior]) { (object, change) in
print("\(object.name)의 차가 \(change.oldValue) 에서 \(change.newValue)로 바꿨다. ")
}
jenny.observe(\.age, options: [.old, .new]) { (object, change) in
print("\(object.name) 나이가 \(change.oldValue) 에서 \(change.newValue) 로 변경 되었다. ")
}
jenny.age = 24
jenny.age = 30
jenny.car = "K3"
KVO Options
KVO 장점
KVO 단점
📝 참고 사이트 |
KVO(Key-Value Observing) 란클래스 오브젝트의 프로퍼티(
|
KVO 란?
사용 방법
import Foundation
// observe 하려는 프로퍼티에 @objc attribute와 dynamic modifier를 추가해야 한다.
class Address: NSObject {
@objc dynamic var town: String
init(town: String) {
self.town = town
}
}
// observer 필요 : observe 하려는 프로퍼티가 변경되는지 봐야하기 때문
// observer 추가 : \.town
// 변경사항이 필요하지 않으면 options 안 주면 됨 -> nil이 출력됨
var address = Address(town: "Seoul")
address.observe(\.town, options: [.old, .new, .initial]) { (object, change) in print(change.oldValue, change.newValue)
print("************************")
}
// address의 town 값 변경
address.town = "Jeju"
address.town = "London"
address.town = "Paris"
/* 결과
< .old, .new, .initial 일 때>
nil Optional("Seoul")
************************
Optional("Seoul") Optional("Jeju")
************************
Optional("Jeju") Optional("London")
************************
Optional("London") Optional("Paris")
************************
< .old, .new, .prior 일 때>
Optional("Seoul") nil
************************
Optional("Seoul") Optional("Jeju")
************************
Optional("Jeju") nil
************************
Optional("Jeju") Optional("London")
************************
Optional("London") nil
************************
Optional("London") Optional("Paris")
************************
*/ 장점
단점
📝 참고 |
KVO(Key-Value Observing)
예시코드class SomeClass: NSObject {
@objc dynamic var value: String = ""
}
let someObject = SomeClass()
someObject.observe(\.value) { (object, change) in
print("SomeClass object value changed to \(object.value)")
}
someObject.value = "test" // TEST 사용 장점
사용 단점
📝참조 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
No description provided.
The text was updated successfully, but these errors were encountered: