SwiftUI –警报仅显示一次

时间:2020-01-18 13:03:50

标签: swiftui combine

我的SwiftUI Alert视图有一个奇怪的问题。在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 个答案:

答案 0 :(得分:2)

尝试使用它(@Published属性已存在默认发布者)

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

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

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