반응형
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
'프로그래밍 > SWIFT' 카테고리의 다른 글
VSCode Swift Formatter 설정 (0) | 2023.09.22 |
---|---|
SIL ( Swift Intermediate Language ) 스위프트 중간 언어 (0) | 2023.07.19 |
[유튭링ㅋ] Mastering Concurrency in iOS (0) | 2023.06.22 |
[Swift] 가장 간단한 Actor 샘플코드, Actor Counter (0) | 2023.06.14 |
SWIFT 기초] 배열 슬라이싱 python과 swift 비교 (0) | 2023.03.02 |