[SwiftUI] Environment 変数を作る方法

SwiftUI

@Environment から様々なシステム情報を取得できますが、@Environment 経由で自分で定義したキー値を使って、値を共有することもできます。その方法を説明します。

@Environment

既に定義されている Environment

CoreData を使う時の \.managedObjectContext や
シート等を閉じる時の \.presentationMode 等が有名かと思いますが、非常に多くの情報が定義されています。

Apple のドキュメントは、こちら

斜め読みだけでもしてみると、面白い発見があるかと思います。

Environment 変数の使い方

CoreData を使うコードでは、Environment 経由で ManagedObjectContext を参照します。

変数定義の時に、以下のように @Environment を指定して定義します。

Environment 使用例

Environment 変数は、アクセス前に事前にどこかで設定されていなければいけません。多くのシステム定義の変数は、システム側で設定してくれていますが、全てではありません。

設定が必要となる時は、上位のビューで設定して、下位のビューから参照します。上位のビューでは、以下のように .environment を使って設定します。

Environment 設定例

# 上記は、Xcode が生成するテンプレートから引用しています。

自分の Environment を作る

キー値の定義

EnvironmentKey という protocol に準拠する形で定義します。

Environment のキー定義

参照場所、保存場所を定義

実際に、Environment でアクセスされる場所として EnvironmentValues がありますので、それを拡張するように プロパティとアクセサを定義します。

EnvironmentValues の extension 例

追加した Environment 変数を使ってみる

上位ビューで Environment 設定

上位ビューコード例

下位ビューで Environment 参照

Environment 経由で参照

まとめ

Environment 変数を定義する手順
  • EnvironmentKey に準拠するようにキータイプを定義する
  • EnvironmentValues を拡張するように、プロパティとアクセサを定義する

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です