Tengo una vista SwiftUI que toma un objeto de entorno llamado appModel
. Luego lee el valor appModel.submodel.count
en su body
método. Espero que esto se una a mi punto de vista de la propiedad count
de submodel
manera que cuando se vuelve a renderizar, pero esto no parecen los cambios de propiedad a suceder.
¿Es esto un error? Y si no, ¿cuál es la forma idiomática de hacer que las vistas se unan a las propiedades anidadas de los objetos del entorno en SwiftUI?
Específicamente, mi modelo se ve así ...
class Submodel: ObservableObject {
@Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
Y mi punto de vista se ve así ...
struct ContentView: View {
@EnvironmentObject var appModel: AppModel
var body: some View {
Text("Count: \(appModel.submodel.count)")
.onTapGesture {
self.appModel.submodel.count += 1
}
}
}
Cuando ejecuto la aplicación y hago clic en la etiqueta, la count
propiedad aumenta pero la etiqueta no se actualiza.
Puedo arreglar esto pasando appModel.submodel
como una propiedad a ContentView
, pero me gustaría evitar hacerlo si es posible.
Respuestas:
Los modelos anidados aún no funcionan en SwiftUI, pero podría hacer algo como esto
Básicamente tu
AppModel
captura el eventoSubmodel
y lo envía más lejos a la VistaEditar:
Si no necesita
SubModel
ser clase, entonces puede intentar algo como esto:fuente
Submodel
serObservableObject
tipo?Los tres ViewModels pueden comunicarse y actualizar
Gracias Sorin por la solución combinada.
fuente
Parece un insecto. Cuando actualizo el xcode a la última versión, funciona correctamente cuando se vincula a ObservableObjects anidados
fuente