У меня странная ситуация, когда представление не обновляется, меняя значение @Published var
на Observable Object
. Цель состоит в том, чтобы обновить логическое значение, чтобы программно перейти к другому представлению после того, как пользователь вошел в систему. Поэтому после завершения проверки подлинности и проверки я обновляю значение, но представление не изменяется. Вместо этого обновление переменной в начале процесса аутентификации приводит к изменению представления.
Observable Object
class SomeModel: ObservableObject {
@Published var pushNewView: Bool = false
// the view reacts to the value changes correctly if I update the value here
func updateValue() {
self.pushNewView = true
}
// the view doesn't change if I update the value here
func updateFromClosure() {
someFunctionWithClosure { (document, error) in
do {
try // another function is callled here
if someCondition {
// ..
else {
// Here I can see both prints with correct values
DispatchQueue.main.async {
self.pushNewView = true
print(self.pushNewView, "BOOL IS CHANGED!")
print("entered!!!!!!!!")
}
}
} catch let error {
// ...
}
}
}
Так что в обоих приведенных выше примерах Значение @Published var обновляется корректно, но представление будет реагировать только в первом случае.
Просмотр
struct LoginView: View {
@ObservedObject var someModel = SomeModel()
var body: some View {
NavigationView {
VStack {
Text("SomeText")
NavigationLink(destination: TestView(), isActive: $someModel.pushNewView) { EmptyView() }
}
}
}
Итак, есть идеи относительно того, почему это происходит?