【SwiftUI】@Environmentを10分で理解する!

Swift

@Environmentとは

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

実際にシステムで設定されている環境値は以下を確認ください。

EnvironmentValues | Apple Developer Documentation
A collection of environment values propagated through a view hierarchy.

環境値の利用方法

定義方法は以下のような形になります。

@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に置いておきます。

GitHub - toma3113/TestEnvironment
Contribute to toma3113/TestEnvironment development by creating an account on GitHub.

参考資料

EnvironmentValues | Apple Developer Documentation

EnvironmentKey | Apple Developer Documentation

【Swift UI】@Environmentとは?使い方と使用可能なキー値一覧

【Swift UI】独自のEnvironmentValuesを定義する方法と使い方!

プロフィール

SIer勤めのエンジニア
アプリケーションエンジニアとして、WebやiOSなどのアプリ開発をメインにしてます

tomaをフォローする
Swift