我的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")
,并且控制台中会显示错误警报,但不会显示警报。
有人知道为什么警报仅显示一次吗?
答案 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
}
}
}
}