[SwiftUI] ObservableObject

RudinP·2025년 8월 11일
0

Study

목록 보기
336/363

ObservableObject

class SomeClass: ObservableObject {
}
  • 클래스 프로토콜
  • 뷰에서 인스턴스의 변화 감지 가능
  • 값이 바뀌면 뷰 업데이트
  • 뷰모델, 공유데이터를 ObservableObject로 구현

ObservedObject

struct SomeView: View {
	@ObservedObject var property = SomeClass()
}
  • 속성 특성
  • property wrapper
  • Observable Object를 감시하다가 값이 바뀌면 뷰를 업데이트

@Published

class SomeClass: ObservableObject {
	@Published var property = Value()
}
  • ObservedObject에서 사용
  • 다른 뷰가 감시 가능
    • 해당 값이 바뀌면 뷰를 업데이트

//감시 가능 객체
//속성중 하나는 반드시 Published 사용해야 의미 있음
class ViewModel: ObservableObject {
    @Published var title = "Hello"
    //배열이 바뀔때마다 새로운 배열을 방출 -> ForEach나 List에 바인딩 시 항상 최신 항목 표시
    @Published var list = [String]()
}
struct ObservableList: View {
    @State private var value: String = ""
    
    //ViewModel에 있던 @Published 변수의 값이 바뀔때마다 이 뷰가 갱신됨
    @ObservedObject var viewModel = ViewModel()
    
    var body: some View {
        VStack {
            Text(viewModel.title)
                .font(.largeTitle)
            
            Button {
                //Published이기 때문에 바로 뷰에 적용됨
                viewModel.title = "Hi"
            } label: {
                Text("Update Title")
            }
            .padding()
            
            HStack {
                TextField("Value", text: $value)
                    .textFieldStyle(.roundedBorder)
                    .padding()
                
                Button {
                    viewModel.list.insert(value, at: 0)
                    value = ""
                } label: {
                    Text("Add To List")
                }
                .padding()
            }
            
            List(viewModel.list, id: \.self) { item in
                Text(item)
            }
        }
    }
}
  • Update Title 버튼 클릭 시 ViewModel의 title값 변경-> ObservableList의 뷰 갱신됨
  • Add To List 버튼 클릭 시 ViewModel의 list 갱신 -> ObservableList의 리스트 뷰 갱신됨

상태에 따라 자동으로 업데이트 하는 방법

1. 감시당할(값이 변할) 변수가 있는 ViewModel을 ObservedObject로 선언

2. ObservedObject로 다른 뷰에서 선언될 ViewModel은 ObservableObejct 프로토콜 채택

3. ObservableObejct 채택한 ViewModel에서 값이 바뀔 변수들은 @Published 사용

하나라도 빠지면 동작 X

profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글