Menu
Coddy logo textTech

Объекты окружения

Часть раздела Введение в 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.

challenge icon

Задание

Средне

CartBadge должен показывать количество товаров в общей корзине. Передайте cart в VStack с помощью .environmentObject и измените CartBadge, чтобы он считывал его с помощью @EnvironmentObject. После одного нажатия на значке должно отображаться 1 in cart.

Попробуйте сами

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в SwiftUI

Потренируйтесь самостоятельно: Песочница Swift