SwiftUI Property Wrappers - @ObservedObject

sanghoon Ahn·2023년 2월 18일
0

SwiftUI

목록 보기
4/5

observable object를 subscribe 하거나 observable object의 변화에 따라 view를 무효화하고 싶을때 사용하는 property wrapper

@ObservableObject property wrapper는 view에서 생성되거나 소유하고 있지 않은 observable object를 wrapping 합니다.

@StateObject와 동일한 type의 객체에 적용되고 비슷한 기능을 제공합니다만

view 내부에서 instance를 생성하는 @StateObject와 달리 @ObservedObject는 view 내부에서 instance를 생성하지 않고 주입받습니다.

struct DataOwnerView: View {
    @StateObject private var provider = DataProvider()
    
    var body: some View {
        VStack {
            Text("provider value: \(provider.currentValue)")
            
            DataUserView(provider: provider)
        }
    }
}

struct DataUserView: View {
    @ObservedObject var provider: DataProvider
    
    var body: some View {
        // create body and use / modify `provider`
    }
}

DataOwnerView는 DataProvider instance의 reference를 DataUserView에 주입하고, DataUserView는 @ObservedObject로 사용합니다.

SwiftUI 내부적으로 뷰 리렌더링 시 @ObservedObject 값을 유지하지 않습니다.

대신 SwiftUI는 부모 view에서 @ObservedObject를 주입받을것을 알고있기 때문에 @ObservedObject 값을 사용할 수 있습니다.

앞서 이야기 했듯이 view에서 값을 소유한다면 @StateObject, 주입받는다면 @ObservedObject로 사용합니다.

@ObservedObject을 사용해야하는 경우는

  • ObservableObject의 변화에 따라 처리해야는 일이 있을 때
  • view가 ObservableObject를 사용하고 외부로부터 주입받아 사용한다
  • view가 ObservableObject를 생성하는 경우에는 @StateObject를 사용한다
profile
hello, iOS

0개의 댓글