ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SwiftUI] #문법 - @ObservedObject
    iOS/SWIFTUI 2023. 4. 14. 15:11
    728x90
    반응형

    오늘은 swiftui에서 사용하는 중요한 프로퍼티 래퍼에 대해 포스팅을 해보겠다.

     

     

    @ObservedObject

     

    뷰의 변경점이 감지 되면 화면을 업데이트하는 역할을 한다. iOS 14부터 등장한 @StateObject와 매우 흡사한데, 그 차이는 @StateObject를 포스팅할 때 자세히 차이를 설명하겠다.

     

    관찰 가능한 객체를 구독하고 관찰 가능한 객체가 변경될 때마다 보기를 무효화하는 속성 래퍼 유형

     

    개발 문서에 있는 내용을 그대로 직역하면 다음과 같다. 이전의 포스팅한 @State 같은 경우는 한 구조체 안에서 선언하고 다른 뷰와 데이터를 공유할 수 없는 것이 특징이다. 여기서 포인트는 데이터의 변경이 감지 되면 뷰를 새로 그린다는 것이다. 자세히 알아보자

     

    일단 @ObservedObject를 사용하기 위한 조건은 다음과 같다.

     

    - ObservableObject프로토콜을 준수하는 객체를 사용

    - ObservableObject의 데이터가 변경되었을을 알리는 방법은 Published 사용

     

    MVVM패턴으로 프로젝트를 진행하게 되면 자연스럽게 ViewModel을 접하게 될텐데 뷰모델에 Published로 선언되는 변수를 뷰에서 @ObservedObject로 사용하게 된다. 

    class A: ObservableObject {
      @Published var a: Int = 0
    }
    struct B: View {
        @ObservedObject var b = A()
        
        var body: some View {
            Text("\(b.a)")		//0
        }
    }

    기존의 객체지향과 동일하게 객체를 사용하여 변수를 사용한다. 더 자세한 예제를 살펴보자

    import SwiftUI
    
    
    class Setting:ObservableObject{
        
        @Published var score:Int = 0
    }
    struct ContentView: View {
        
        @ObservedObject var score = Setting()
        
        var body: some View {
                VStack {
                        Text("카운트 : \(score.score)").font(.largeTitle)
                        Button(action: {
                            score.score += 1
                        }){
                            Image(systemName: "globe")
                                .imageScale(.large)
                                .foregroundColor(.black)
                        }
                    .padding()
            }
            
        }
    }
    
    
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }

    버튼이 클릭이 되면 Setting클래스의 객체가 호출이 되고 값이 업데이트 됨에 따라 뷰를 새로 그린다. (@State와 매우 흡사한 형태)

     

    @State에 대한 내용을 완벽히 숙지 했다면 이번 개념도 어렵지는 않을 것이다. 같은 역할을 하는 클래스하나에 다른 뷰로 이 클래스에 접근하기 위해 이 방식을 채택한다. 하지만 이것도 상황에 맞게 잘 구분해서 쓰도록하자 

    'iOS > SWIFTUI' 카테고리의 다른 글

    [SwiftUI] - GeometryReader  (0) 2024.07.26
    [SwiftUI] - @ViewBuilder  (0) 2024.07.16
    [SWIFTUI] #문법 - @Binding  (1) 2023.01.04
    [SWIFTUI] #문법 - @State  (0) 2022.10.09
Designed by Tistory.