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