SwiftUI의 라이프 사이클2
작성일
이전 포스팅과 이어 마져 설명을 해보려고한다.
@ObservableObject
- Protocol이다.
- Combine 프레임워크의 일부다.
- @Pulished를 사용해야한다.
- 변수의 값이 추가되거나, 삭제되는걸 View가 알수있게 해준다.
- MVVM에 적용하기 좋은 프로토콜이다.
class MyViewModel: ObservableObject {
@Published var dataSource: MyModel
init(dataSource: MyModel) {
self.dataSource = dataSource
}
}
@StateObjcet
- @ObservedObject 같은 거지만 View를 랜더링할때, 실수하는걸 방지해준다.
struct ContentView: View { @StateObject var user = User() }
@ObservedObject
- @ObservedObject를 통해 view가 외부 객체를 감지하게 해준다.
- 아래 코드에서 user 객체의 @Published 값이 바뀔 때 마다 view를 다시 그려준다.
- User class는 ObservableObject를 준수하고 @Published 변수를 갖는다.
- @ObservedObject user 변수는 이러한 User class 객체를 담고 있다.
class User: ObservableObject {
@Published var name = "Hohyeon Moon"
}
struct ContentView: View {
@ObservedObject var user = User()
var body: some View {
VStack {
Text("Your name is \(user.name).")
}
}
}
@EnvironmentObject
한번 정리한 적이 있긴한데, 다시한번 정리해 보려고한다.
- 앱 전체에 공유되는 데이터에 사용된다.
- .environmentObject()를 통해 값을 전달할 수 있다.
- 전달하는 object는 ObservableObject 프로토콜을 준수해야 한다.
@main
struct Twitter_Clone_SwiftUIApp: App {
init() {
FirebaseApp.configure()
}
var body: some Scene {
WindowGroup {
ContentView().environmentObject(AuthViewModel())
}
}
}
후 사용할땐,
@EnvironmentObject var viewModel: AuthViewModel