@Environment
, 커스텀 공유 데이터 @EnvironmentObject
로 구분@Environment(\.)
형식@Environment(\.colorScheme) var currentColorScheme
@EnvironmentObject var viewModel: ViewModel
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 var viewModel = ViewModel()
@EnvironmentObject
는 인스턴스를 만들어 뷰에 연결하는 방식