@Environmentとは
@EnvironmentとはSwiftUIで利用される、View間で値を共有するための方法の一つです。環境値(EnvironmentValues)として定義されている値をViewで読みとるために利用します。具体的に読み取れる値は、タイムゾーンや、フォントカラーなどです。そのほかにも自身で、設定した環境値を読み込むこともできます。
実際にシステムで設定されている環境値は以下を確認ください。

環境値の利用方法
定義方法は以下のような形になります。
@Environment(\.キー値) var 変数名: [型]
具体的なコードは以下になります。
@Environment(\.locale) var locale: Locale
コード説明
@Environment(\.キー値)
環境値に設定されている値を取得してきます。
var locale: Locale
取得してきた環境値を変数:localに代入します。これによりその後の処理内で取得した環境値を利用することができます。
環境値(EnvironmentValues)を独自に定義する
環境値(EnvironmentValues)を独自定義することも可能です。ここからは独自の環境値の定義方法を説明していきます。
独自の環境値の定義方法
定義の方法は以下のようになります。
struct 構造体名:EnvironmentKey {
static let defaultValue:利用したい型名 = デフォルト値
}
extension EnvironmentValues {
var 環境変数名: String {
get { self[構造体名.self] }
set { self[構造体名.self] = newValue }
}
}
具体的なソースコードは以下です。
private struct NewEnvironmentKey: EnvironmentKey {
static let defaultValue: String = "NewEnvironmentValue"
}
extension EnvironmentValues {
var newCustomValue: String {
get { self[NewEnvironmentKey.self] }
set { self[NewEnvironmentKey.self] = newValue }
}
}
コードの説明
private struct NewEnvironmentKey: EnvironmentKey {…}
はじめに、EnvironmentKeyに準拠した構造体を定義します。これを定義することにより、環境内の値にアクセスすることができます。
static let defaultValue: String = “NewEnvironmentValue”
この部分で初期値を決めます。この後定義する環境値を利用する際に初期値として代入されます。
extension EnvironmentValues {…}
EnvironmentValuesを拡張します。これにより独自の環境値(EnvironmentVales)を定義します。
var newCustomValue: String {…}
この部分が独自に定義した環境値になります。この中に、get/setのアクセサを定義していきます。実際に環境値を呼び出す時はkeyとしてこの変数の名前を利用します。
set { self[NewEnvironmentKey.self] = newValue }
newvalueは、デフォルトで定義されている値になります。環境値を呼び出すときに値を入れる場合はこの処理が呼び出されます。
実際に利用するときは上記で説明したような形で呼びだします。
@Environment(\.newCustomValue) var newEnvironmentValue
今回利用したコードのサンプルは以下のGitHubに置いておきます。
参考資料
EnvironmentValues | Apple Developer Documentation
EnvironmentKey | Apple Developer Documentation