我有一个.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)
}
}
在某点isDisabled
为false
。当按钮被点击时,一些东西被异步保存,之后MyModel
被更新,这将导致isDisabled
变成true
。
因为isDisabled
不是@Published
,所以一旦isDisabled
变成true
,按钮就不会更新。
我如何触发SwiftUIView
的刷新,在这种情况下,Button
显式地从Task
内?
Call
model.objectWillChange.send()
您可以尝试将属性存储而不是计算,这样您就可以使用@Published