web-dev-qa-db-ja.com

SwiftUIの属性@EnvironmentObjectはどういう意味ですか?

公式チュートリアルプロジェクト を見るとわかるように、varの前にこの奇妙な@EnvironmentObjectが配置されています。どういう意味ですか?

struct LandmarkDetail: View {
    @EnvironmentObject var userData: UserData
    var landmark: Landmark

    var landmarkIndex: Int {
        userData.landmarks.firstIndex(where: { $0.id == landmark.id })!
    }
    // ...
}
6
Mint

EnvironmentObject

Appleドキュメントから見つけました。

Appleからの説明:

祖先ビューによって提供されるバインド可能なオブジェクトを使用して、バインド可能なオブジェクトが変更されるたびに現在のビューを無効にする動的ビュープロパティ。

Appleドキュメント

私が理解しているのは、いつでも値またはオブジェクトを設定したときでした。例:リスト。リストをリロードすると、いくつかのビューオブジェクトが置き換えられ、削除されました。

0

これは、SwiftUIがオブジェクトにアクセスしてビューを更新する方法を決定するために使用するBindableObjectです。例のUserDataクラスを確認してください。環境オブジェクトを宣言するビューのすべての子がそれにアクセスできます。この場合はuserDataです。

0
Krames

依存関係の注入を必要とせずに、ビューがモデルに自動的にアクセスできるように設計されています。

シーンデリゲートで一度環境オブジェクトを設定すると、階層内のすべてのビューが独自のマジックプロパティを介してそれにアクセスできます。ビューがその子のオブジェクトをオーバーライドすることも可能だと思いますが、まだテストしていません。

0
malhal