У меня есть представление SwiftUI, которое принимает в EnvironmentObject называется appModel
. Затем он читает значение appModel.submodel.count
в своем body
методе. Я ожидаю , что это связать мой взгляд на собственность count
на submodel
так , что она повторно делает , когда обновление свойств, но это , кажется, не бывает.
Это ошибка? И если нет, то каким является идиоматический способ привязки представлений к вложенным свойствам объектов среды в SwiftUI?
В частности, моя модель выглядит так ...
class Submodel: ObservableObject {
@Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
И мой взгляд выглядит так ...
struct ContentView: View {
@EnvironmentObject var appModel: AppModel
var body: some View {
Text("Count: \(appModel.submodel.count)")
.onTapGesture {
self.appModel.submodel.count += 1
}
}
}
Когда я запускаю приложение и нажимаю на метку, count
свойство увеличивается, но метка не обновляется.
Я могу исправить это, передав в appModel.submodel
качестве свойства ContentView
, но я хотел бы избежать этого, если это возможно.
Ответы:
Вложенные модели еще не работают в SwiftUI, но вы можете сделать что-то подобное
В основном, вы
AppModel
ловите событиеSubmodel
и отправляете его дальше в View.Редактировать:
Если вам не нужно
SubModel
быть классом, то вы можете попробовать что-то вроде этого:источник
Submodel
бытьObservableObject
тип?Все три ViewModels могут общаться и обновлять
Спасибо Сорин за объединенное решение.
источник
Похоже, ошибка. Когда я обновляю xcode до последней версии, он работает правильно при привязке к вложенным объектам ObservableObjects.
источник