SwiftUIでは、ビュー間で共通の設定や情報を簡単に共有するために環境値(Environment Values)が使用されます。
環境値は、ビューの階層全体にわたってデータを伝播し、任意のビューからアクセスできるため、コードの簡潔さと可読性を向上させることができます。

この記事では、環境値の基本的な使い方といくつかの具体例を紹介します。
環境値の概要
環境値は、SwiftUIのビュー階層全体で共通の情報を保持するための仕組みです。
たとえば、デフォルトのフォントや色、アクセシビリティ設定など、アプリ全体で一貫して使用される値を管理します。
環境値へのアクセス
環境値にアクセスするには、@Environmentプロパティラッパーを使用します。これにより、ビュー内で直接環境値を利用できます。
例1:色の設定を利用する
import SwiftUI
struct EnvironmentValueSmp: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("Hello, World!")
.foregroundColor(colorScheme == .dark ? .blue : .green)
}
}
この例では、colorScheme環境値を使用して、アプリの現在のカラースキーム(ライトまたはダーク)に応じてテキストの色を設定しています。
環境値の設定
環境値をビューに設定するには、environment修飾子を使用します。これにより、ビュー階層全体で環境値が上書きされます。
例2:カスタムフォントサイズを設定する
import SwiftUI
struct EnvironmentValueSmp: View {
var body: some View {
EnvironmentChildSmp()
.environment(\.font, .system(size: 24))
}
}
struct EnvironmentChildSmp: View {
@Environment(\.font) var font
var body: some View {
Text("Custom Font Size")
.font(font)
}
}この例では、EnvironmentValueSmpでカスタムフォントサイズを設定し、その設定がEnvironmentChildSmpに伝播されます。
カスタム環境値の定義
独自の環境値を定義することも可能です。以下の手順でカスタム環境値を作成できます。
例3:カスタム環境値を定義する
カスタムキーを定義します。
import SwiftUI
struct EnvironmentSmpKey: EnvironmentKey {
static let defaultValue: String = "Default Value"
}
extension EnvironmentValues {
var customValue: String {
get { self[EnvironmentSmpKey.self] }
set { self[EnvironmentSmpKey.self] = newValue }
}
}ビューで使用します。
struct EnvironmentChildSmp: View {
@Environment(\.customValue) var customValue
var body: some View {
Text("Custom Value: \(customValue)")
}
}
struct EnvironmentValueSmp: View {
var body: some View {
EnvironmentChildSmp()
.environment(\.customValue, "Updated Value")
}
}この例では、CustomEnvironmentKeyを使用して独自の環境値を定義し、それをビューで利用しています。
まとめ
環境値は、SwiftUIでビュー間の共通情報を管理するための機能です。
@Environmentプロパティラッパーを使用して簡単にアクセスでき、environment修飾子で設定を上書きすることができます。
さらに、独自の環境値を定義して、アプリ全体で一貫した設定を実現することも可能です。
環境値を活用することで、コードの簡潔さと再利用性を向上させ、より保守性の高いアプリを開発することができます。
EnvironmentValueの一覧についてはこちらを参照してください。

