从函数向SwiftUI视图传递Binding变量会导致didSet观察器不再激发



我希望能够在SwiftUI视图中动态返回要用作@Binding的正确变量,但当我创建一个函数以返回Binding时,我不再接收对该变量的didSet调用。我不确定这是没有支持的行为还是我做错了什么。

以下是的示例

struct ContentView: View {
@StateObject var dataStore = DataStore()

var body: some View {
VStack {
Toggle("val1", isOn: $dataStore.val1)
Toggle("val2", isOn: dataStore.boundVal2())
}

}
}
class DataStore: ObservableObject {

@AppStorage("val1")
var val1: Bool = false {
didSet {
print("did set val1")
}
}

@AppStorage("val2")
var val2: Bool = false {
didSet {
print("did set val2")
}
}

func boundVal2() -> Binding<Bool> {
return $val2
}
}

当你切换第一个值时,你会得到didSet调用,但当你切换第二个值时你不会得到它。

事实证明,您需要使用Binding对象将其传递回,如下所示:

func boundVal2() -> Binding<Bool> {
Binding(
get: { self.val2 },
set: { self.val2 = $0 }
)
}

最新更新