[SwiftUI] EnvironmentObject

RudinP·2025년 8월 11일
0

Study

목록 보기
337/351
  • 여러 뷰에서 공유하는 데이터가 필요할 때 사용
  • 미리 정의되어있는 시스템 공유 데이터 @Environment , 커스텀 공유 데이터 @EnvironmentObject 로 구분

@Environment

  • @Environment(\.) 형식
@Environment(\.colorScheme) var currentColorScheme

@EnvironmentObject

@EnvironmentObject var viewModel: ViewModel
  • 시스템 공유 데이터와 다르게 초기화 X
  • 뷰가 생성되면 인스턴스를 만들어 저장해주어야함.
struct EnvironmentObjects_Previews: PreviewProvider {
    static var previews: some View {
        EnvironmentObjects_Tutorials()
            .environmentObject(ViewModel())
    }
}
@main
struct StatesApp: App {
    var body: some Scene {
        WindowGroup {
            //첫번째 화면에서 주입하면 이후 모든 화면에 자동 전달
            MainList()
                .environmentObject(ViewModel())
        }
    }
}
  • environmentObject로 전달된 값을 특별한 장소에 저장하고 뷰와 연결해줌

  • childView 혹은 연결된 다른 뷰로 자동으로 전달해줌

  • environmentObject 속성이 있다면 뷰에 추가되어있거나, 아니면 다른 뷰에서 전달된 데이터가 있는지 확인하고 -> 동일한 형식의 인스턴스가 있다면 속성에 자동으로 저장해줌

  • 존재하지 않는다면 크래시 발생

@ObservedObject와의 차이

  • @ObservedObject는 선언과 동시에 값 설정 가능
    • 만약 다른 뷰로 전달하거나 받는다면 항상 initializer가 필요함
@ObservedObject var viewModel = ViewModel()
  • 반면 @EnvironmentObject 는 인스턴스를 만들어 뷰에 연결하는 방식
    • 뷰 계층을 따라 자동 전달
    • initializer 필요 X
profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글