公式チュートリアルプロジェクト を見るとわかるように、var
の前にこの奇妙な@EnvironmentObject
が配置されています。どういう意味ですか?
struct LandmarkDetail: View {
@EnvironmentObject var userData: UserData
var landmark: Landmark
var landmarkIndex: Int {
userData.landmarks.firstIndex(where: { $0.id == landmark.id })!
}
// ...
}
EnvironmentObject
Appleドキュメントから見つけました。
Appleからの説明:
祖先ビューによって提供されるバインド可能なオブジェクトを使用して、バインド可能なオブジェクトが変更されるたびに現在のビューを無効にする動的ビュープロパティ。
私が理解しているのは、いつでも値またはオブジェクトを設定したときでした。例:リスト。リストをリロードすると、いくつかのビューオブジェクトが置き換えられ、削除されました。
これは、SwiftUIがオブジェクトにアクセスしてビューを更新する方法を決定するために使用するBindableObjectです。例のUserDataクラスを確認してください。環境オブジェクトを宣言するビューのすべての子がそれにアクセスできます。この場合はuserData
です。
依存関係の注入を必要とせずに、ビューがモデルに自動的にアクセスできるように設計されています。
シーンデリゲートで一度環境オブジェクトを設定すると、階層内のすべてのビューが独自のマジックプロパティを介してそれにアクセスできます。ビューがその子のオブジェクトをオーバーライドすることも可能だと思いますが、まだテストしていません。