SwiftUI🐧
SwiftUI)ObservableObject
성실농장주
2023. 9. 3. 10:41
ObservableObject
이름에서 알 수 있듯이 ObservableObject를 채택한 객체는 관찰을 하는 객체가 되게 됩니다.
그래서 위에 정의처럼 객체가 변경되기전에 신호를 보내는(emit) publisher를 가지고 객체라고 설명하는 것입니다.
@Published
해당 프로퍼티가 랩퍼가 표시된 속성의 변경사항을 관찰하고 있다가 변경 시에 그 속성에 의존하는 모든 view가 로드되어 변경 사항을 반영합니다.
class MyModel: ObservableObject {
@Published var count = 0//해당 속성이 변경되었을때 이 속성의 변경 사항을 발행!func incrementCount() {
count += 1//변경 사항을 관찰하고 있는 속성을 변경을하는 지점
}
}
objectWillChange
objcetWillChange publisher 같은 경우는 @published 래퍼로 감싸진 속성이 변경되기 직전에 원하는 명령을 방출(emit)하는 publisher이다.
class Contact: ObservableObject {
@Published var name: String
@Published var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func haveBirthday() -> Int {
age += 1
return age
}
}
let john = Contact(name: "John Appleseed", age: 24)
cancellable = john.objectWillChange
.sink { _ in
print("\\(john.age) will change")
//john의 속성 age가 변경되기 직전에 objectWillChange를 통해 변경 직전에 반응할 수 있음
}
print(john.haveBirthday())
// Prints "24 will change"// Prints "25"