如何强制刷新SwiftUI视图?

new9mtju  于 2022-12-10  发布在  Swift
关注(0)|答案(2)|浏览(239)

我有一个带有.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,按钮就不会更新。
如何触发SwiftUI View的刷新,在本例中是Button,它是从Task中显式触发的?

ovfsdjhp

ovfsdjhp1#

呼叫

model.objectWillChange.send()
7kqas0il

7kqas0il2#

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

相关问题