[SwiftUI] EnviromentObject란?

호랭이·2022년 8월 29일
1

🍎 SwiftUI

목록 보기
5/6

EnviromentObject

  • 많은 뷰와 데이터를 공유해야할 때 사용한다.
  • 뷰의 어디에서나 모델 데이터를 공유할 수 있다.
  • 데이터가 변경될 때 뷰가 자동으로 업데이트된다.

State, Binding, ObservedObject와의 차이점?

  • 값을 바인딩해서 사용할 경우, $ 기호를 이용해서 값을 전달받아야하는데, 사용해야하는 뷰가 많거나 뷰의 계층이 복잡할 경우에는 전달의 전달의 전달...을 하면서 코드가 복잡해질 수 있다.

이와 다르게 한번만 받아와서 모든 뷰가 접근할 수 있게 하는 방법은?

struct TodaysWeather_SwiftUIApp: App {
    @StateObject private var repository = Repository()
    @StateObject private var imageCacheManager = ImageCacheManager()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(repository)
                .environmentObject(imageCacheManager)
        }
    }
}

위와 같이 App파일 내에 선언한 뒤, 사용할 뷰에서 EnvironmentObject 키워드로 선언하면 된다.

struct CityList: View {
    @EnvironmentObject var repository: Repository
    @EnvironmentObject var imageCacheManager: ImageCacheManager
    
    ...

UIKit, MVVM을 적용한 프로젝트를 진행하면서 하나의 뷰는 하나의 뷰모델이 책임진다! 를 기억하고 있었는데, SwiftUI과 MVVM에서는 이 개념을 적용하기 힘들다는 생각이 들었다.
당연함..UIKit이 아님...
따라서 SwiftUI에서 사용하면 적절한 아키텍쳐들에 대해서 고민중이다.
여러 정보들을 모아서 생각해본 뒤에 블로깅할 예정!

profile
삐약

0개의 댓글