Eu tenho uma visualização SwiftUI que utiliza um EnvironmentObject chamado appModel
. Em seguida, ele lê o valor appModel.submodel.count
em seu body
método. Espero que este se ligar meu ponto de vista para a propriedade count
de submodel
modo que ele processa novamente quando as atualizações de propriedade, mas isso não parece acontecer.
Isso é um inseto? E se não, qual é a maneira idiomática de vincular exibições a propriedades aninhadas de objetos de ambiente no SwiftUI?
Especificamente, meu modelo fica assim ...
class Submodel: ObservableObject {
@Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
E minha visão é assim ...
struct ContentView: View {
@EnvironmentObject var appModel: AppModel
var body: some View {
Text("Count: \(appModel.submodel.count)")
.onTapGesture {
self.appModel.submodel.count += 1
}
}
}
Quando executo o aplicativo e clico no rótulo, a count
propriedade aumenta, mas o rótulo não é atualizado.
Eu posso consertar isso passando appModel.submodel
como uma propriedade para ContentView
, mas gostaria de evitar fazer isso, se possível.
Respostas:
Modelos aninhados ainda não funcionam no SwiftUI, mas você pode fazer algo assim
Basicamente, você
AppModel
captura o eventoSubmodel
e o envia para o ViewEditar:
Se você não precisa
SubModel
ser de classe, pode tentar algo assim:fonte
Submodel
ser doObservableObject
tipo?Todos os três ViewModels podem se comunicar e atualizar
Obrigado Sorin pela solução Combine.
fonte
Parece bug. Quando atualizo o xcode para a versão mais recente, ele funciona corretamente quando vinculado a ObservableObjects aninhados
fonte