此代码不起作用,这意味着onChange永远不会被调用,当 Select 下拉选项时,变量也不会更改.
struct ExamplePicker: View {
@State var val: Int32 = 2
var body: some View {
HStack {
Menu {
Picker(selection: $val, label: EmptyView()) {
Text("Val1").tag(1)
Text("Val2").tag(2)
Text("Val3").tag(3)
}
} label: {
HStack {
Text("Value: ")
Spacer()
Text(String(format: "%d", val))
Spacer()
}
}
.onChange(of: val) { newSelection in
print(">>> HERE")
}
}
}
}
但是,如果您将val更改为类型Int,则完全可以正常工作. 在我看来这像是个窃听器
编辑: 已解决-问题是在.tag()中需要完全相同的类型. 因此,.tag(1)应该是Int而不是Int32.因此需要.tag(Int32(1))
让它更令人困惑的是,这是可行的:
struct ExamplePicker: View {
@Binding var val: Int64
var body: some View {
HStack {
Picker(selection: $val, label: EmptyView()) {
Text("Val1").tag(1)
Text("Val2").tag(2)
Text("Val3").tag(3)
}
.onChange(of: val) { newSelection in
print(">>> HERE")
}
}
}
}