Общие модели через @Environment
Внедрите модель в окружение представления.
«Общие модели через @Environment» — бесплатный урок SwiftUI Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SwiftUI Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SwiftUI Academy содержит 4 уроков всего.
Передача на многие уровни вниз
Передавать модель через каждое промежуточное представление быстро надоедает. environment позволяет глубоким дочерним представлениям обращаться к ней напрямую.
Что такое environment
environment — это общий набор значений, проходящих вниз по дереву представлений, поэтому любой потомок может прочитать то, что поместил туда предок.
Внедрение с помощью .environment
Поместите наблюдаемую модель в дерево с помощью модификатора .environment родительского представления.
ContentView()
.environment(model)Чтение с помощью @Environment
Дочернее представление читает общую модель, объявляя свойство с оболочкой @Environment и типом модели.
@Environment(Counter.self) private var modelСопоставление по типу
environment находит модель по её типу, поэтому тип внедряемой модели должен совпадать с типом, который запрашивает дочернее представление.
Без ручной передачи
Теперь дочерним представлениям не нужно получать модель через каждый инициализатор. При необходимости они просто извлекают её из environment.
Использование общей модели
После чтения модель из environment ведёт себя как любая другая: читайте её значения и вызывайте её методы.
Text("\(model.count)")
Button("Add") { model.increment() }Один экземпляр, много читателей
Все читают один и тот же внедрённый экземпляр, поэтому изменения, внесённые на одном экране, отображаются везде, где его читают.
Внедрите один раз на верхнем уровне
Внедрите модель ближе к вершине дерева, часто в корне приложения, чтобы все расположенные ниже экраны могли использовать её совместно.
WindowGroup {
RootView().environment(model)
}Владелец по-прежнему использует @State
Одно представление по-прежнему владеет моделью через @State и внедряет её. environment лишь передаёт этот единственный экземпляр вниз.
Отсутствующая модель вызывает сбой
Если дочернее представление читает модель, которую не получило environment, приложение аварийно завершает работу, поэтому всегда внедряйте модель до появления любого читателя.
Быстрая проверка
Итоговая проверка общего доступа через environment.
Итоги
Вы использовали @Environment, чтобы поделиться одной моделью по всему дереву представлений: внедрили её на верхнем уровне, а затем читали по типу в любом потомке. 🌍
Изучай Swift с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Общие модели через @Environment» бесплатный?
Да — полный текст урока «Общие модели через @Environment» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SwiftUI Academy, подпишись на CoddyKit PRO. Курс SwiftUI Academy содержит 4 уроков всего.
Чему я научусь в уроке «Общие модели через @Environment»?
Внедрите модель в окружение представления. Ты практикуешь SwiftUI Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SwiftUI Academy?
Предыдущий опыт не требуется. SwiftUI Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Общие модели через @Environment»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SwiftUI Academy?
Да. Каждый урок SwiftUI Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- От состояния представления к классу модели
- Макрос @Observable
- @State для принадлежащих объектов
- Общие модели через @Environment