我希望能够在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 }
)
}