Environment Valuesとは?

この記事は約4分で読めます。

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の一覧についてはこちらを参照してください。

タイトルとURLをコピーしました