Apple Developer Documentation
developer.apple.com
1. Making Classes Observable
Working with Reference Type
이전 챕터에서는 @State, @Binding property wrappers를 사용하여 View 계층에서 업데이트를 트리거하기 위해 진실 소스를 정의했다. 이번에는 앱의 UI에 대한 진실 소스로서 참조 유형을 정의하는 것을 알아본다.
@State 은 오직 structures 나 enumerations 같은 Value type (값 타입)에만 작동한다.
SwiftUI는 @ObservedObject, @StateObject, @EnvironmentObject 같은
reference type (참조 타입) 을 진실 소스로 선언하는 property wrappers를 제공한다.
Making a Class Observable
class 에서 property wrappers를 사용하기 위해서는 class observable를 만들어야 한다.
ObservableObject protocol을 적용함으로써 class observable을 만들 수 있다.
UI가 변경될 때 트리거 해야하는 속성을 선택하고 @Published 를 붙인다.
class ScrumTimer: ObservableObject {
@Published var activeSpeaker = ""
@Published var secondsElapsed = 0
@Published var secondsRemaining = 0
// ...
}
Monitoring an Object for Changes
SwiftUI에서 @ObservedObject, @StateObject, or @EnvironmentObject 속성중 하나를 추가하여 관찰 가능한 개체를 모니터링 한다. 이러한 wrappers 중 하나로 선언된 view property는 View 계층에 새로운 진실 소스를 만든다.
@StateObject wrapper는 view에서 observable object를 만든다.
시스템은 view를 만들 때 object를 초기화하고, object를 전달하는 해당 view 또는 다른 view에서 object를 사용할 수 있도록 유지한다.
struct MeetingView: View {
@StateObject var scrumTimer = ScrumTimer()
// ...
}
@ObservedObject property wrapper를 사용해 다른 View에 객체를 전달했음을 나타낸다. 다른 view에서 객체가 생성되기 때문에, 객체의 초기 값을 제공하지 않는다.
struct ChildView: View {
@ObservedObject var timer: ScrumTimer
// ...
}
다음 observable object의 인스턴스를 를 view 이니셜 라이저에 전달한다.
struct MeetingView: View {
@StateObject var scrumTimer = ScrumTimer()
var body: some View {
VStack {
ChildView(timer: scrumTimer)
}
}
// ...
}
object를 개별 view에 전달하는 대신에 환경에다가 object를 배치할 수 있다.
environmentObject view 한정자는 object 환경의 부모 view에 배치한다.
struct ParentView: View {
@StateObject var scrumTimer = ScrumTimer()
var body: some View {
VStack {
ChildView()
.environmentObject(scrumTimer)
}
}
// ...
}
그 다음 계층중에 중간 view에 object의 참조가 없더라도 @EnvironmentObject property wrapper를 사용하여 부모 view의 자식 계층도 object를 사용할 수 있다.
SwiftUI는 데이터를 읽는 View에서 종속석만을 추적한다.
struct ChildView: View {
@EnvironmentObject var timer: ScrumTimer
// ...
}
@EnvironmentObject에 대해 더 배우고 싶다면 아래 링크로 가면 된다.
https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app
Apple Developer Documentation
developer.apple.com
'iOS > iOS App Dev Tutorials' 카테고리의 다른 글
[iOS App Dev Tutorials] SwiftUI - State Management (3) (0) | 2022.05.18 |
---|---|
[iOS App Dev Tutorials] SwiftUI - State Management (2) (0) | 2022.05.18 |
[iOS App Dev Tutorials] SwiftUI - Passing Data (2) (0) | 2022.05.12 |
[iOS App Dev Tutorials] SwiftUI - Passing Data (1) (0) | 2022.05.12 |
[iOS App Dev Tutorials] SwiftUI - Navigation and Modal Presentation (3) (0) | 2022.05.12 |