Hacking with Swift 사이트의 강좌 번역본입니다.
[원문 : https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-observedobject-property-wrapper]
What is the @ObservedObject property wrapper?
SwiftUI는 @ObservedObject property wrapper를 제공함으로써 뷰가 외부 객체의 상태(state)를 관찰할수 있고, 중요한 것이 변경될때 알림을 받습니다.
예를들어, 다음과 같이 사용할 수 있습니다.
class Order: ObservableObject {
@Published var items = [String]()
}
struct ContentView: View {
@ObservedObject var order = Order()
var body: some View {
// your code here
}
}
Order 클래스는 @Published를 사용하므로 items가 변경될때, 자동으로 변경사항 알림을 보낼 것이고, ContentView는 이런 알림을 관찰하기 위해서 @ObservedObject를 사용합니다. @ObservedObject 없어도 변경사항 알림은 전송되지만 무시됩니다.
비록 충분히 간단해 보이지만, 몇 가지 세부사항을 살펴볼 가치가 있습니다.
첫번째, @ObservedObject로 표시된 모든 타입은 반드시 ObservableObject 프로토콜을 준수해야하며, 이는 구조체보다는 클래스여야 한다는 것을 의미합니다. 이것은 선택사항이 아닙니다 - SwiftUI는 여기에서 클래스를 사용하는 것을 요구합니다.
두번째, observed 객체들은 뷰의 외부 데이터용으로 특별히 설계되었으며, 이는 2개 이상의 뷰에서 공유되는 것을 의미합니다. @ObservedObjectproperty wrapper는 자동으로 확인할 것입니다. 해당 property를 유심히 지켜봄으로써 중요한 변경사항은 이를 사용하는 모든 뷰를 다시 로딩 할 것입니다.
세번째, observed 객체에 있는 모든 properties들에 의해 뷰를 갱신하지는 않습니다 - @Published 또는 사용자정의 알림을 사용해서, 변경사항 알림을 보내는 properties를 결정해야 합니다. ObservableObject를 준수하는 타입은 기본적으로 필요한 경우에 사용자정의 알림을 만들기 위한 objectWillChange publisher를 제공합니다.
'SwiftUI > Appendix A' 카테고리의 다른 글
What is the @FetchRequest property wrapper? (0) | 2019.11.22 |
---|---|
What is the @GestureState property wrapper? (0) | 2019.11.22 |
What is the @Binding property wrapper? (0) | 2019.11.22 |
What is the @Environment property wrapper? (0) | 2019.11.22 |
What is the @EnvironmentObject property wrapper? (0) | 2019.11.22 |
What is the @Published property wrapper? (0) | 2019.11.21 |
What is the @State property wrapper? (0) | 2019.11.21 |
Understanding property wrappers in Swift and SwiftUI (0) | 2019.11.21 |