如何强制刷新一个SwiftUI视图?



我有一个.disabled()条件的按钮,这是我的ObservableObject模型类的计算属性。这意味着我不能做@Published

像这样:

class MyModel : ObservableObject {
var isDisabled: Bool {
if ... {
return true
}
else {
return false
}
}
}
struct SettingsNewsSubscriptionsView : View {
@ObservedObject var model: MyModel
var body: some View {
...
Button("Save") {
Task {
// Saves to backend asynchronously, then updates MyModel which changes isDisabled.
}
}
.disabled(model.isDisabled)
}
}

在某点isDisabledfalse。当按钮被点击时,一些东西被异步保存,之后MyModel被更新,这将导致isDisabled变成true

因为isDisabled不是@Published,所以一旦isDisabled变成true,按钮就不会更新。

我如何触发SwiftUIView的刷新,在这种情况下,Button显式地从Task内?

Call

model.objectWillChange.send()

您可以尝试将属性存储而不是计算,这样您就可以使用@Published

最新更新