Observei um padrão estranho ao usar @ObservedObject
e @Published
.
Eu o injeto dentro de uma SwiftUI
visualização, mas a visualização parece atualizar antes da mudança real do objeto.
Então meu @ObservedObject
não tem o valor correto quando verifico sua @Published
propriedade.
Se eu adicionar um didSet
com um , objectWillChange.send()
funciona como esperado.
Aqui está o código com o qual estou trabalhando:
class AuthManager: ObservableObject {
@Published public private(set) var user: User {
willSet { print("Will set") }
didSet { print("Did set") }
}
}
struct AuthView: View {
@ObservedObject var authManager: AuthManager
var body: some View {
let _ = Self._printChanges()
print("AuthManager user = \(authManager.user)")
return (
Text("AuthManager Test")
)
}
}
Quando atualizo meu objeto de usuário no AuthManager, recebo os logs na seguinte ordem:
Will set
AuthView: @self, @identity, _authManager
AuthManager user = xxx // <-- old version
Did set
O comportamento funciona como esperado se eu remover o @Published
e acionar o objectWillChange.send()
no didSet
.
Espero ter a nova versão quando a visualização for atualizada. Estou esquecendo de algo ou há algo que não entendi sobre ObservableObject
e @Published
?
Obrigado