環境オブジェクト
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 が表示されるとアプリはエラーで停止します。
チャレンジ
中級CartBadgeには共有カートの件数を表示させます。.environmentObjectを使ってVStackにcartを渡し、CartBadgeを変更して@EnvironmentObjectで読み取るようにします。1回タップした後、バッジには1 in cartと表示される必要があります。
自分で試してみよう
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
SwiftUI入門のすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド