본문 바로가기

난 iOS개발자/SwiftUI

[SwiftUI] View와 ViewModel (ObservableObject, @Published, @ObservedObject)

728x90

@State에 이은 두번째.

 

ObservableObject와 @ObservedObject는 SwiftUI에서 ViewModel구조를 사용할때 유용하다. 

 

ObservableObject를 채택하면 클래스의 내부속성의 변경사항을 구독자에게 전달할수 있는 객체가 된다. 

오로지 클래스에만 사용이 가능하다.

class SomeViewModel: ObservableObject {
	@Published var myName: String = ""
}

그리고 뷰 모델에서 변경 가능한 속성을 선언하기 위해 @Published 속성 래퍼를 사용해야 한다. 

 

@Published는 ObservableObject 프로토콜을 준수하는 클래스에 속성을 감시할수 있도록 하는 프로퍼티 래퍼다.

 

SwiftUI를 사용한 MVVM구조에서 View, ViewModel을 구현한다면 아래와 같다.

class ContentViewModel: ObservableObject {
    @Published var myName: String = ""
}

struct ContentView: View {

    @ObservedObject var vm = ContentViewModel()
    
    
    var body: some View {
        
        VStack() {
            Text("내 이름은 \(vm.myName) 입니다.")
                .padding()
            
            HStack() {
                Spacer(minLength: 20)
                TextField("이름을 입력하세요.", text: $vm.myName)
                Spacer(minLength: 20)
            }
        }
    }
}

여기서 @ObservedObject는 뷰 모델을 관찰하는데 사용한다. 다른 용도로서의 사용은 자유롭게 하자.

@ObservedObject로 선언된 속성에 대해 인스턴스를 참조하고 해당 객체에서 발생하는 변경사항을 받을 수 있다.

 

728x90

'난 iOS개발자 > SwiftUI' 카테고리의 다른 글

Alert  (0) 2023.09.04
@Binding 변수 포함된 View의 PreviewProvider 사용  (0) 2023.05.21
[SwiftUI] @State  (1) 2023.02.21