-
[Swift] SwiftUI 프로퍼티 래퍼 뿌시기 4: @EnvironmentObject테크 2024. 3. 7. 17:58
@Observable... 너에게 닿기가 너무나도 힘들구나...
조금만 파이팅해봅시다!!!
@EnvironmentObject
@frozen @propertyWrapper struct EnvironmentObject<ObjectType> where ObjectType : ObservableObject
- 조상 뷰가 제공하는 ObservableObject를 관찰하는 프로퍼티 래퍼
- 조상 뷰에서 ObservableObject를 제공할 때 environmentObject(_:) modifier를 사용해야 함
- @Observable 클래스를 관찰하려면, Environment를 사용하고 조상 뷰에서 environment modifier를 사용해야 함
무슨 말이냐?
조상 뷰가 제일 처음 ObservableObject를 하나 구독하고 있고
이를 environmentObject로 설정하면
그 하위 뷰에서 해당 객체를 @EnvironmentObject로 감싸주기만 하면 하면
마치 전역 변수인냥 접근할 수 있다는 겁니다!
넘 간단한디?
당장 예제 코드 가자ㅏㅏㅏ!
import SwiftUI class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false } struct MyView: View { @StateObject private var model = DataModel() var body: some View { Text(model.name) MySubView() .environmentObject(model) // Here! } } struct MySubView: View { @EnvironmentObject var model: DataModel var body: some View { Toggle("Enabled", isOn: $model.isEnabled) } }
MySubView().environmentObject(model)을 해줌으로써
model은 앞으로 하위 뷰에서는 언제든지 접근할 수 있다라고 선언하는거에요.
그리고 이 값을 자유롭게 사용하기 위해서
하위 뷰에서는 @EnvironmentObject로 감싸주기만 하면 되는거죠!
Property Wrapper에 대해서 함께 공부하고 싶다면
#PropertyWrapper 태그로 들어가기!'테크' 카테고리의 다른 글
[네트워크] Application Layer (0) 2024.03.21 [네트워크] 네트워크 개요: 네트워크 구조 및 네트워크 딜레이 (Packet-Switching Delay) (1) 2024.03.18 [Swift] SwiftUI 프로퍼티 래퍼 뿌시기 3: @ObservedObject와 @StateObject 차이 이해하기 (0) 2024.03.07 [Swift] SwiftUI 프로퍼티 래퍼 뿌시기 2: @Published 찍먹하기 (feat. ObservableObject) (2) 2024.03.06 [Swift] SwiftUI 프로퍼티 래퍼 뿌시기 1: @State와 @Binding (0) 2024.03.06