Объекты окружения
Часть раздела Введение в SwiftUI путешествия по Swift на Coddy. Урок 41 из 50.
Передавать объект через каждое представление до того, которому он нужен, утомительно. Вместо этого поместите его в окружение, и любое представление ниже сможет его прочитать:
@StateObject private var cart = Cart()
var body: some View {
NavigationStack {
ShopView()
}
.environmentObject(cart)
}Представление, расположенное дальше в иерархии, объявляет, что ему требуется, с помощью @EnvironmentObject, без начального значения:
struct CartBadge: View {
@EnvironmentObject var cart: Cart
var body: some View {
Text("\(cart.count) in cart")
}
}ShopView никогда не упоминает корзину, но находящийся внутри него CartBadge всё равно получает тот же объект. Если ни одно представление выше не предоставит его с помощью .environmentObject, приложение завершится с ошибкой, когда будет показан CartBadge.
Задание
СреднеCartBadge должен показывать количество товаров в общей корзине. Передайте cart в VStack с помощью .environmentObject и измените CartBadge, чтобы он считывал его с помощью @EnvironmentObject. После одного нажатия на значке должно отображаться 1 in cart.
Попробуйте сами
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в SwiftUI
10Проект — Coddy Coffee
Обзор проектаЭкраны напитков2Отображение содержимого
Текстовые представленияЧисла в текстеШрифтыЦветаSF SymbolsПовторение — ценник5Состояние и кнопки
КнопкиСвойство @StateСостояние «истина или ложь»Условные представленияПовторение — счётчик очков6Ввод данных пользователем
Текстовое полеПереключательСчётчик и ползунокВыборПовторение — форма заказаПотренируйтесь самостоятельно: Песочница Swift