728x90
SMALL
@Environment(ModelData.self) var modelData는 Swift의 새로운 Observation 프레임워크에서 도입된 방식으로,
앱의 전역(shared) 상태를 SwiftUI 뷰에서 주입받아 사용하는 방법
🔍 @Environment(ModelData.self) var modelData의 의미
이 코드는 ModelData라는 타입의 객체를 환경(Environment)에서 자동으로 주입받는다는 뜻
즉, SwiftUI는 앱의 상위 어딘가에 있는 ModelData 인스턴스를 찾아서 이 뷰에 연결
🧠 쉽게 말하면:
- ModelData는 앱 전체에서 공통으로 사용하는 데이터 모델
- 이 데이터를 뷰 안에서 쓰고 싶을 때, 직접 생성하거나 전달하지 않아도 됨
- 대신 @Environment(ModelData.self)를 쓰면 자동으로 환경에서 가져옴
🧩 배경: SwiftUI의 Environment 시스템
기존 방식 (ObservableObject 사용 시):
@EnvironmentObject var modelData: ModelData
- 이건 ObservableObject 기반의 SwiftUI 환경 주입 방식이었고,
- 반드시 .environmentObject()로 상위 뷰에서 주입해야 했음
✅ 새로운 방식 (@Observable + @Environment):
@Observable
class ModelData {
var landmarks: [Landmark] = ...
}
@Environment(ModelData.self) var modelData
- 더 간결하고 타입 안전하게 환경 데이터를 주입받을 수 있음
- 더 이상 @EnvironmentObject나 .environmentObject(...)를 명시할 필요 없이,
Swift가 자동으로 ModelData 인스턴스를 환경에서 찾아서 주입
💡 전체 흐름 요약
@Observable
class ModelData {
var landmarks: [Landmark] = load("landmarkData.json")
}
struct LandmarkList: View {
@Environment(ModelData.self) var modelData // 전역 데이터 주입
@State private var showFavoritesOnly = false // 지역 상태
var body: some View {
List(modelData.landmarks) { landmark in
...
}
}
}
- modelData.landmarks를 통해 JSON에서 로드된 데이터를 가져와 리스트를 그리고,
- showFavoritesOnly는 이 뷰에서만 사용하는 필터링 상태
728x90
LIST
'SwiftUI' 카테고리의 다른 글
| @Binding 은 뭐야? (0) | 2025.06.05 |
|---|---|
| @Observable 이 뭐야? (0) | 2025.06.05 |
| @State란? (0) | 2025.06.05 |
| Hashable, Codable 뭐여? (0) | 2025.06.04 |
| Spacer() (0) | 2024.12.22 |