Добавить объявление

@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.
25.06.2025 11 382