반응형

 

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를 제공합니다.

반응형
Posted by 까칠코더
,