No estoy seguro de si esto es un antipatrón en este nuevo y valiente mundo de SwiftUI en el que vivimos, pero esencialmente tengo un @EnvironmentObject con cierta información básica del usuario guardada en ella que mis vistas pueden llamar.
También tengo un @ObservedObject que posee algunos datos necesarios para esta vista.
Cuando aparece la vista, quiero usar ese @EnvironmentObject para inicializar el @ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Desafortunadamente, no puedo llamar a self en la variable de entorno hasta después de la inicialización:
"No se puede usar el miembro de instancia 'userData' dentro del inicializador de propiedades; los inicializadores de propiedades se ejecutan antes de que 'self' esté disponible".
Puedo ver algunas rutas posibles hacia adelante, pero todas se sienten como hacks. ¿Cómo debería abordar esto?
init
a la estructura.Property wrappers are not yet supported on local properties
básicamente dice que no puedo crear un @ObservedObject en un método init.Respuestas:
Aquí está el enfoque (la OMI más simple):
fuente
en lugar de crear una subvista, puede agregar un inicializador ficticio para
"ViewObject"
poder llamarlo antes de llamar al inicializador realpara el registro no lo he probado
fuente
Aquí hay una manera fácil de hacerlo:
Con este ayudante que lo hace funcionar:
fuente