🗂

@Environmentとは?

2024/08/19に公開

結論

@Environmentはプロパティラッパーです。
@Environmentを使うと、
ビューがモーダルで表示されているか?
ダークモードかライトモードか?
システムの設定やアプリの状態など、アプリ全体に影響を与える一連の値や設定情報にアクセスできます。

環境とは?

SwiftUIの「環境」とは、アプリ全体に影響を与える一連の値や設定のことを指します。これらの環境値は、SwiftUIの階層構造の中で自動的にビューに渡され、アプリケーションの様々な部分で共通して使われます。例えば、ユーザーのカラースキーム(ライトモードやダークモード)やテキストサイズの設定、ロケール情報などがこれに含まれます。

使い方

@Environment プロパティラッパーは、以下のように使用します

struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme  // カラースキーム(ライト or ダークモード)を取得

    var body: some View {
        Text("Hello, World!")
            .padding()
            .background(colorScheme == .dark ? Color.black : Color.white)
    }
}

環境値の例

@Environment を使ってアクセスできる環境値には、以下のようなものがあります:

  • colorScheme: 現在のカラースキーム(.light または .dark)にアクセスします。
  • presentationMode: 現在のビューの表示状態(モーダルかどうかなど)を管理します。
  • locale: 現在のロケール(地域と言語設定)にアクセスします。
  • sizeCategory: 現在のコンテンツサイズのカテゴリー(テキストサイズの設定など)にアクセスします。
  • accessibilityDifferentiateWithoutColor: アクセシビリティ設定で「色分けしない」を有効にしているかどうかにアクセスします。

@Environment と @EnvironmentObject の違い

  • @Environment: 既存のシステムの環境値(例えば、カラースキームやロケールなど)にアクセスするために使用されます。
  • @EnvironmentObject: 自分で定義したデータオブジェクトをSwiftUIの階層全体に渡すために使用されます。これは、複数のビューで共有するアプリケーション状態を管理するのに便利です。

Discussion