Разработка
Поваренная книга SwiftUI: шаринг состояний между представлениями с помощью объектов окружения
Свойства-обертки EnvironmentObject в SwiftUI предоставляют способ обмена данными во всем приложении.
Хотя ObservableObject и ObservedObject отлично подходят для обмена состоянием между представлениями, они требуют, чтобы вы передавали состояние вручную от родительского View к дочернему. Но что, если вы хотите обмениваться данными между несколькими представлениями в вашем приложении, не передавая их явно? Вот тут-то и приходят на помощь объекты окружения (Environment Objects).
Свойства-обертки EnvironmentObject в SwiftUI предоставляют способ обмена данными во всем приложении. Их можно рассматривать как глобальное хранилище данных, к которому может обратиться любое представление. Это особенно полезно, когда у вас есть глубоко вложенные представления и вы не хотите передавать данные через несколько слоев.
Чтобы использовать объект окружения, сначала нужно определить модель данных как объект ObservableObject. Например, создадим объект GameSettings, в котором будет храниться счет игры.
class GameSettings: ObservableObject {
@Published var score = 0
}
Затем в корне приложения вы предоставляете этот объект иерархии представлений с помощью модификатора environmentObject.
struct ContentView: View {
var body: some View {
GameView()
.environmentObject(GameSettings())
}
}
Теперь любое представление в иерархии может получить доступ к GameSettings, используя обертку свойства EnvironmentObject.
struct GameView: View {
@EnvironmentObject var settings: GameSettings
var body: some View {
VStack {
Text("Score: \(settings.score)")
Button("Increment Score") {
settings.score += 1
}
}
}
}
Вот как выглядит предварительный просмотр:

Используйте EnvironmentObject, чтобы сделать данные доступными во всем приложении.
В этом примере GameView имеет доступ к объекту GameSettings и может обновлять счет. Когда кнопка нажата, счет увеличивается, и представление Text автоматически обновляется, поскольку оно наблюдает за объектом GameSettings.
Примечание: Обертка свойства EnvironmentObject не предоставляет значения по умолчанию. Объект должен быть указан где-то в представлениях-предках с помощью .environmentObject(_:), иначе ваше приложение аварийно завершит работу.
← Предыдущая статья: Состояние, привязка, ObservableObject и ObservedObject
-
Аналитика магазинов2 недели назад
Мобильный рынок Ближнего Востока: исследование Bidease и Sensor Tower выявляет драйверы роста
-
Интегрированные среды разработки3 недели назад
Chad: The Brainrot IDE — дикая среда разработки с играми и развлечениями
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2025.45
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.46

