반응형

 

Hacking with Swift 사이트의 강좌 번역본입니다.

 

[원문 : https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-observedobject-to-manage-state-from-external-objects]

 

How to use @ObservedObject to manage state from external objects

 

observed 객체를 사용할때 필요한 3가지 핵심사항이 있습니다: ObservableObject 프로토콜은 데이터를 저장할 수 있는 클래스에서 사용되며, @ObservedObject 프로퍼티 래퍼(wrapper)는 뷰 내부에서 observable 객체 인스턴스를 저장하기 위해 사용되고, @Published 프로퍼티 래퍼(wrapper)는 observed 객체 내부의 모든 프로퍼티에 추가해서 변경될때 뷰가 업데이트 됩니다. 

 

예제에서 처럼, UserSettings 클래스는 ObservableObject를 준수합니다.

class UserSettings: ObservableObject {
    @Published var score = 0
}

 

코드가 많지 않지만, SwiftUI가 우리 대신에 엄청나게 많은 일을 하고 있습니다! 여기에는 2가지 중요한 사항이 있습니다.

  1. ObservableObject를 준수하는 것은 해당 클래스의 인스턴스가 뷰 내부에서 사용될 수 있도록 하므로, 중요한 변경사항이 발생할때 뷰가 다시 로딩될 것입니다. 
  2. @Published 프로퍼티 래퍼(wrapper)는 SwiftUI에게 score가 변경하면 뷰를 다시 로딩해야 하는 것을 알려줍니다.

다음과 같이 뷰의 내부에서 UserSettings 클래스를 사용할 수 있습니다.

struct ContentView: View {
    @ObservedObject var settings = UserSettings()

    var body: some View {
        VStack {
            Text("Your score is \(settings.score)")
            Button(action: {
                self.settings.score += 1
            }) {
                Text("Increase Score")
            }
        }
    }
}

 

보다시피, ObservedObject 프로퍼티 래퍼(wrapper)를 setting과 함께 사용하는 것 외에는, 거의 모든것이 같아 보입니다. 

중요한 차이점 하나는, setting 프로퍼티가 private로 선언되지 않았다는 것입니다. 이는 바인딩 객체가 하나의 뷰 이상에서 사용될수 있기 때문이므로, 공개적으로 공유하는 것이 일반적입니다.

반응형
Posted by 까칠코더
,