SwiftUI——警报只显示一次

SwiftUI – Alert is only showing once

我在使用 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") 将被执行并且 错误警报 出现在控制台中,但警报未显示。

有谁知道为什么 Alert 只显示一次?

尝试改用(@Published 属性已经有默认发布者)

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

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

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