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"