構造体


Environment


ビューの環境から値を読み取るプロパティラッパー。


iOS 13.0+ iPadOS 13.0+ Mac Catalyst 13.0+ macOS 10.15+ tvOS 13.0+

visionOS 1.0+ watchOS 6.0+

@frozen @propertyWrapper
  struct Environment<Value>




以下で言及


SwiftUI を使用したメニューバーの構築とカスタマイズ
(Building and customizing the menu bar with SwiftUI)


検索インターフェースのアクティベーションの管理
(Managing search interface activation)


SwiftUI ライフサイクルへの移行
(Migrating to the SwiftUI life cycle)



概観


ビューの環境に格納されている値を読み取るには、Environment プロパティラッパーを使用して下さい。プロパティ宣言で EnvironmentValues キーパスを使用して、読み取る値を指定します。例えば、colorScheme プロパティのキーパスを使用して、現在のビューのカラースキームを読み取るプロパティを作成できます。


@Environment(\.colorScheme) var colorScheme: ColorScheme

ビューのコンテンツは、宣言されたプロパティの wrappedValue から読み取った関連値に基づいて条件付けできます。他のプロパティラッパーと同様に、ラップされた値にアクセスするには、プロパティを直接参照します。


if colorScheme == .dark { // Checks the wrapped value.
    DarkContent()
} else {
    LightContent()
}

値が変更されると、SwiftUI はその値に依存するあなたのビューのすべての部分を更新します。例えば、上記の例では、ユーザーが外観設定を変更した場合にこれが起こります。


このプロパティラッパーを使用して環境値を読み取ることはできますが、設定することはできません。SwiftUI は、システム設定に基づいて一部の環境値を自動的に更新し、その他の環境値には適切なデフォルト値を提供します。environment(_:_:) ビュー修飾子を使用して、これらの環境値の一部をオーバーライドしたり、独自に定義したカスタム環境値を設定したりできます。


SwiftUI が提供する環境値の完全なリストについては、EnvironmentValues 構造体のプロパティを参照してください。カスタム環境値の作成方法については、Entry() マクロを参照してください。



監視可能なオブジェクトを取得する


Environment を使って、ビューの環境から監視可能なオブジェクトを取得することもできます。監視可能なオブジェクトは Observable プロトコルに準拠していなければならず、あなたのアプリはオブジェクト自体またはキーパスを使用して、そのオブジェクトを環境に設定しなければなりません。


オブジェクト自体を使用してオブジェクトを環境に設定するには、environment(_:) 修飾子を使用します。


@Observable
class Library {
    var books: [Book] = [Book(), Book(), Book()]

    var availableBooksCount: Int {
        books.filter(\.isAvailable).count
    }
}

@main
struct BookReaderApp: App {
    @State private var library = Library()

    var body: some Scene {
        WindowGroup {
            LibraryView()
                .environment(library)
        }
    }
}

その型を使用して監視可能なオブジェクトを取得するには、プロパティを作成し、Environment プロパティラッパーにオブジェクトの型を提供します。


struct LibraryView: View {
    @Environment(Library.self) private var library

    var body: some View {
        // ...
    }
}

デフォルトでは、オブジェクト型をキーとして環境からオブジェクトを読み取ると、オプショナルでないオブジェクトが返されます。このデフォルトの動作は、現在の階層内のビューが、environment(_:) 修飾子を使用して、その型のオプショナルでないインスタンスを以前に保存していることを前提としています。ビューがその型を使用してオブジェクトを取得しようとし、そのオブジェクトが環境内に存在しない場合、SwiftUI は例外を throw します。

オブジェクトが環境内に存在する保証がない場合は、以下のコードに示すように、オブジェクトのオプショナルのバージョンを取得して下さい。オブジェクトが環境で利用できない場合、SwiftUI は例外を throw する代わりに nil を返します。


@Environment(Library.self) private var library: Library?


キーパスを使用して監視可能なオブジェクトを取得する


キーパスを持つオブジェクトを設定するには、environment(_:_:) 修飾子を使用します。


@Observable
class Library {
    var books: [Book] = [Book(), Book(), Book()]

    var availableBooksCount: Int {
        books.filter(\.isAvailable).count
    }
}

@main
struct BookReaderApp: App {
    @State private var library = Library()

    var body: some Scene {
        WindowGroup {
            LibraryView()
                .environment(\.library, library)
        }
    }
}

オブジェクトを取得するには、プロパティを作成し、キーパスを指定します。


struct LibraryView: View {
    @Environment(\.library) private var library

    var body: some View {
        // ...
    }
}




トピックス


environment (環境) インスタンスの作成


init(_:)

指定されたキーパスを読み取るための環境プロパティを作成します。



値の取得


var wrappedValue: Value

環境プロパティの現在の値。





関連


以下に準拠


DynamicProperty

Sendable

SendableMetatype





以下も見よ


環境値へのアクセス


struct EnvironmentValues

ビュー階層を通じて伝播される環境値のコレクション。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ