使用绑定从常规类函数修改SwiftUI @State

问题描述

我正在尝试创建一个常规类函数,该函数需要一个可选的View作为参数。想法是该函数修改布尔值以禁用/启用SwitUI func executeTask(inProgress: Binding<Bool>? = nil) { inProgress = true // Error // ... inProgress = false // Error } ,而无需回调块。

问题是我无法在函数中找到修改布尔值的正确方法

@Binding var inProgress: Bool

错误

不能赋值:'inProgress'是一个'let'常量

我还试图通过在类中创建oldProduct.map(p => p.quantity++); 来模仿SwiftUI的行为,对其进行分配,然后运气不佳地对其进行修改

如果有帮助,我也可以使用非可选的'inProgress',但到目前为止没有帮助。

解决方法

要更改Binding的值,应将新值分配给其wrappedValue属性。

尝试一下:

func executeTask(inProgress: Binding<Bool>? = nil)
{
    inProgress?.wrappedValue = true
}
,

Binding是一个特殊的包装,它可以通过.wrappedValue

访问引用存储的值。

这是固定的变体(已通过Xcode 12测试)

func executeTask(inProgress: Binding<Bool>? = nil) {
    // optional chain
    inProgress?.wrappedValue = true
}