Ответ
Environment (окружение) в SwiftUI — это механизм для передачи зависимостей (данных, объектов, значений) через иерархию представлений без явной передачи через инициализаторы каждого view.
Основные инструменты:
@Environment— для чтения системных или кастомных значений.@EnvironmentObject— для передачи ссылочных типов (ObservableObject).- Модификатор
.environment()— для установки значений.
Как создать и использовать кастомное environment-значение:
- Определите ключ:
struct ThemeKey: EnvironmentKey { static let defaultValue: Color = .blue // Значение по умолчанию } - Расширьте
EnvironmentValues:extension EnvironmentValues { var theme: Color { get { self[ThemeKey.self] } set { self[ThemeKey.self] = newValue } } } -
Используйте в дочернем view:
struct ContentView: View { @Environment(.theme) var theme // Чтение значения var body: some View { Text("Hello") .foregroundColor(theme) } } - Установите значение в родительском view:
ParentView() .environment(.theme, .red) // Установка значенияКлючевое отличие от
@EnvironmentObject:@Environmentработает с value-типами и системными настройками (размер шрифта, locale), а@EnvironmentObject— для общих моделей данных (ObservableObject).