Je ne suis pas sûr que ce soit un contre-modèle dans ce nouveau monde SwiftUI courageux dans lequel nous vivons, mais essentiellement j'ai un @EnvironmentObject avec quelques informations utilisateur de base enregistrées que mes vues peuvent appeler.
J'ai également un @ObservedObject qui possède certaines données requises pour cette vue.
Lorsque la vue apparaît, je veux utiliser ce @EnvironmentObject pour initialiser le @ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Malheureusement, je ne peux pas m'appeler sur la variable d'environnement avant l'initialisation:
"Impossible d'utiliser le membre d'instance 'userData' dans l'initialiseur de propriété; les initialiseurs de propriété s'exécutent avant que 'self' ne soit disponible."
Je peux voir quelques itinéraires possibles, mais ils se sentent tous comme des hacks. Comment dois-je aborder cela?
init
à la structure.Property wrappers are not yet supported on local properties
Fondamentalement, il est impossible de créer un @ObservedObject dans une méthode init.Réponses:
Voici l'approche (l'OMI la plus simple):
la source
au lieu de créer une sous-vue, vous pouvez ajouter un initialiseur factice à votre
"ViewObject"
afin de pouvoir l'appeler avant d'appeler le véritable initialiseurpour mémoire, je ne l'ai pas testé
la source
Voici un moyen simple d'y accéder:
Avec cet assistant qui le fait fonctionner:
la source