SwiftUI - оповещение отображается только один раз - PullRequest
1 голос
/ 18 января 2020

У меня странная проблема с представлением предупреждений SwiftUI. В ObservableObject я делаю несколько сетевых запросов, и в случае ошибки я покажу предупреждение. Это моя упрощенная модель:

class MyModel: ObservableObject {
    let objectWillChange = ObservableObjectPublisher()

    @Published var isError: Bool = false

    public func network() {
        Service.call() {
            self.isError = true

            DispatchQueue.main.async {
                self.objectWillChange.send()
            }
        }
    }
}

Service.call - пустышка для моего сетевого запроса. Мой взгляд выглядит так:

struct MyView: View {
    @ObservedObject var model: MyModel

    var body: some View {
        …
        .alert(isPresented: self.$model.isError) {
            print("Error Alert")
            return Alert(title: Text("Alert"))
        }
    }
}

При первом вызове все работает и отображается предупреждение. Для всех дальнейших вызовов будет выполняться print("Error Alert") и Предупреждение об ошибке появляется в консоли, но предупреждение не отображается.

Кто-нибудь знает, почему предупреждение отображается только один раз?

1 Ответ

1 голос
/ 18 января 2020

Попробуйте использовать вместо этого (уже существует издатель по умолчанию для @Published свойств)

class MyModel: ObservableObject {
    @Published var isError: Bool = false

    public func network() {
        Service.call() {

            DispatchQueue.main.async {
               self.isError = true // << !!! important place to call
           }
        }
    }
}
...