Menu
Coddy logo textTech

環境オブジェクト

CoddyのSwiftジャーニー「SwiftUI入門」セクションの一部。レッスン 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には共有カートの件数を表示させます。.environmentObjectを使ってVStackcartを渡し、CartBadgeを変更して@EnvironmentObjectで読み取るようにします。1回タップした後、バッジには1 in cartと表示される必要があります。

自分で試してみよう

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

SwiftUI入門のすべてのレッスン

自分で練習してみよう: Swiftプレイグラウンド