0Pricing
Swift Academy · レッスン

共有状態のための@EnvironmentObject

プロパティの逐次受け渡しをせず、深いView階層に共有モデルを注入します。

「共有状態のための@EnvironmentObject」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

`@EnvironmentObject` は、明示的に渡すことなく階層内の任意のビューに共有モデルを注入します。ユーザー認証やテーマ設定など、アプリ全体の状態に適しています。

階層への注入

```swift struct App: App { @StateObject var authModel = AuthModel() var body: some Scene { WindowGroup { RootView().environmentObject(authModel) } } } ```

@EnvironmentObject による利用

```swift struct ProfileView: View { @EnvironmentObject var auth: AuthModel var body: some View { Text("Hello, \(auth.username)!") } } // No init parameter needed — auto-injected from environment ```

Environment Object がない場合のクラッシュ

オブジェクトを注入せずに `@EnvironmentObject` を使用すると、実行時にアプリがクラッシュします: ``` Fatal error: No ObservableObject of type AuthModel found. A View.environmentObject(_:) must be attached to ancestor. ```

プレビューでの EnvironmentObject

```swift #Preview { ProfileView().environmentObject(AuthModel.mock) } ```

複数の Environment Object

```swift RootView() .environmentObject(authModel) .environmentObject(cartModel) .environmentObject(themeModel) ``` 各型は型をキーとして識別されるため、名前の競合はありません。

比較:@EnvironmentObject と @ObservedObject

• `@ObservedObject` — init パラメータが必要で、依存関係が明確です • `@EnvironmentObject` — init パラメータが不要で、暗黙的に注入されます 明確さを重視する場合は `@ObservedObject` を優先し、本当にグローバルな状態には `@EnvironmentObject` を使用してください。

ネストしたビューへの注入

```swift View A (.environmentObject(model)) └── View B (@EnvironmentObject var model) ✓ └── View C (@EnvironmentObject var model) ✓ — inherits ```

システム値用の @Environment

`@Environment`(Object サフィックスなし)と混同しないでください: ```swift @Environment(\.colorScheme) var scheme // system dark/light @Environment(\.locale) var locale // current locale ```

実践パターン:AppModel

```swift @Observable class AppModel { var isLoggedIn = false var username = "" var cart: [Item] = [] } ``` 現代的な方法では、単一の `@Observable` アプリモデルをルートに注入します。

確認問題

`@EnvironmentObject` を注入せずに使用すると、どうなりますか?

まとめ

重要なポイント: • `.environmentObject(model)` はサブツリー全体に注入します • `@EnvironmentObject var m: ModelType` — パラメータなしで自動的に注入されます • 注入がない場合は実行時にクラッシュします • プレビューにも必ず注入してください • システム値には `@Environment(\.key)` を使用します(異なる API です) 次は Single Source of Truth です。

よくある質問

「共有状態のための@EnvironmentObject」レッスンは無料ですか?

はい。「共有状態のための@EnvironmentObject」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「共有状態のための@EnvironmentObject」で何を学びますか?

プロパティの逐次受け渡しをせず、深いView階層に共有モデルを注入します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「共有状態のための@EnvironmentObject」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. @Binding:双方向のデータフロー
  2. @ObservableObjectと@StateObject
  3. 共有状態のための@EnvironmentObject
  4. 単一の信頼できる情報源と単方向フロー
← Swift Academyに戻る