web-dev-qa-db-fra.com

Que signifie l'attribut «@ EnvironmentObject» dans SwiftUI?

Comme vous pouvez le voir dans le projet de tutoriel officiel , il y a cet étrange @EnvironmentObject placé avant var. Qu'est-ce que ça veut dire?

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

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

EnvironmentObject

J'ai trouvé à partir de Apple document.

Description d'Apple:

Propriété de vue dynamique qui utilise un objet pouvant être lié fourni par une vue ancêtre pour invalider la vue actuelle chaque fois que l'objet pouvant être lié change.

doc Apple

Ma compréhension est à chaque fois que nous définissons une valeur ou qu'un objet est init. Ex: Liste. Lorsque nous rechargeons une liste, certains objets de vue affichés sont remplacés et supprimés.

0

C'est un BindableObject que SwiftUI utilisera pour déterminer comment rafraîchir vos vues en accédant à l'objet. Découvrez la classe UserData dans l'exemple. Tout enfant de la vue qui déclare l'objet environnemental y aura accès. Dans ce cas, userData.

0
Krames

Il est conçu pour permettre à vos vues d'accéder automatiquement au modèle sans avoir besoin d'injection de dépendances.

Définissez l'objet d'environnement une fois dans le délégué de scène, puis toutes les vues de la hiérarchie y ont accès via leur propre propriété magique. Je pense qu'il est également possible pour une vue de remplacer l'objet pour ses enfants, mais je n'ai pas encore testé cela.

0
malhal