Ich habe eine SwiftUI-Ansicht, die ein aufgerufenes EnvironmentObject aufnimmt appModel
. Es liest dann den Wert appModel.submodel.count
in seiner body
Methode. Ich erwarte , dass dies meine Ansicht nach auf die Eigenschaft binden , count
auf , submodel
so dass es wieder macht , wenn die Eigenschaft Updates, aber dies nicht zu geschehen scheint.
Ist das ein Fehler? Und wenn nicht, wie können Ansichten idiomatisch an verschachtelte Eigenschaften von Umgebungsobjekten in SwiftUI gebunden werden?
Insbesondere sieht mein Modell so aus ...
class Submodel: ObservableObject {
@Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
Und meine Ansicht sieht so aus ...
struct ContentView: View {
@EnvironmentObject var appModel: AppModel
var body: some View {
Text("Count: \(appModel.submodel.count)")
.onTapGesture {
self.appModel.submodel.count += 1
}
}
}
Wenn ich die App starte und auf das Etikett count
klicke, erhöht sich die Eigenschaft, aber das Etikett wird nicht aktualisiert.
Ich kann dies beheben, indem ich appModel.submodel
als Eigentum an übergeben werde ContentView
, aber ich möchte dies nach Möglichkeit vermeiden.