프로그래밍/SWIFT
SwiftUI] StateObject, Published, ObservableObject
daewonyoon
2023. 7. 11. 15:02
반응형
https://www.hackingwithswift.com/books/ios-swiftui/sharing-swiftui-state-with-stateobject
swiftui 에서 struct 인스턴스 변수는 간단한 @State 로 (내부 프로퍼티의) 변경을 감지하여 UI에 반영할 수 있다.
하지만 class 인스턴스 변수는 @State 를 붙여도 내부 프로퍼티의 변경을 감지하지 못한다. class 의 내부 프로퍼티의 변경을 감지하도록 하는 방법은 다음과 같다.
1. 외부에서 변경을 감지하려는 클래스의 프로퍼티에 @Published 를 붙여준다.
class User {
@Published var name: String = "Micky"
@Published var age: Int = 10
}
2. view 의 클래스 인스턴스 선언에 @State 가 아닌 @StateObject 를 붙여준다.
@StateObject var user = User()
// view body ...
3. @StateObject 는 ObservableObject 프로토콜을 따르는 클래스여야 한다. 클래스가 ObservableObject 프로토콜을 상속하게 한다.
class User: ObservableObject {
@Published var name: String = "Micky"
@Published var age: Int = 10
}
@StateObject 와 비슷한 @ObservedObject 도 있다. 이건 다른 view 에 있는 인스턴스의 변화를 모니터하고 싶을 때 사용한다.
728x90