Tengo una vista SwiftUI que toma un objeto de entorno llamado appModel. Luego lee el valor appModel.submodel.counten su bodymétodo. Espero que esto se una a mi punto de vista de la propiedad countde submodelmanera 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 countpropiedad aumenta pero la etiqueta no se actualiza.
Puedo arreglar esto pasando appModel.submodelcomo 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
AppModelcaptura el eventoSubmodely lo envía más lejos a la VistaEditar:
Si no necesita
SubModelser clase, entonces puede intentar algo como esto:fuente
SubmodelserObservableObjecttipo?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