@EnvironmentObject в SwiftUI.@EnvironmentObject — это property wrapper, который позволяет передавать общие данные между несколькими View без явной передачи через инициализатор.🤔 Как использовать:
♣️ Создаем ObservableObject:
class UserSettings: ObservableObject {
@Published var isDarkMode = false
}
♣️ Добавляем в Environment в корневом View:
@main
struct MyApp: App {
var settings = UserSettings()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(settings) // Передаем объект в корневой вью
}
}
}
♣️ Используем в любом дочернем View:
struct ProfileView: View {
@EnvironmentObject var settings: UserSettings // Автоматическая подписка на объек в сабвью
var body: some View {
Toggle("Темная тема", isOn: $settings.isDarkMode)
}
}
⚠️ Ключевые особенности:
🔸 Автоматическое обновление: View перерисовывается при изменении
@Published свойств.🔸 Глобальный доступ: объект доступен в любой части иерархии View без цепочки
@Binding.🔸 Безопасность: если объект не передан в .environmentObject(), приложение крашнется — это помогает находить ошибки на раннем этапе.
✅ Когда использовать?
🔹 Для глобальных настроек (тема, язык, авторизация и т.д.).
🔹 Когда нужно делиться данными между несвязанными View.
🔹 Вместо долгих цепочек
@Binding / @ObservedObject.➡️ Подписаться на канал
Мобильный трудоголик