Ответ
Используйте @EnvironmentObject для передачи общих данных состояния через несколько уровней иерархии представлений без явной передачи через инициализаторы каждого дочернего вида. Это идеально для глобального состояния приложения, такого как данные пользователя, настройки темы или менеджер аутентификации.
Пример использования:
// 1. Создайте ObservableObject
class UserSettings: ObservableObject {
@Published var isLoggedIn = false
}
// 2. Вставьте объект в окружение корневого вида
MyApp()
.environmentObject(UserSettings())
// 3. Получите доступ к объекту в любом дочернем виде
struct ContentView: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
if settings.isLoggedIn {
HomeView()
} else {
LoginView()
}
}
}
Ключевые моменты:
- Для чего: Для данных, к которым нужен доступ из многих несвязанных частей приложения.
- Чего избегать: Не используйте для локального состояния, которое передается только на один уровень вниз — для этого подходит
@Bindingили@State. - Важно: Объект должен быть помечен как
ObservableObjectи добавлен в окружение с помощью модификатора.environmentObject()до его использования, иначе приложение упадет.