为什么 属性 Observer 不适用于 SwiftUI 中的 Picker
Why Property Observer does not work for Picker in SwiftUI
当我使用按钮(ontapGesture)更改选定的驱动器时,它会打印“值已更改”,但是当我使用选择器更改值时,didset 功能不起作用。
enum WheelDrive: String, CaseIterable, Identifiable {
case frontdrive
case reardrive
case Fourwheeldrive
case Neutral
var id: String { self.rawValue }
}
@State var selecteddrive = WheelDrive.Fourwheeldrive {
willSet(newValue){ print("value changed")}
}
Picker(selection: $selecteddrive, label: Text("WheelDrive")) {
Text("前驱").tag(WheelDrive.frontdrive)
.foregroundColor(.white)
Text("后驱").tag(WheelDrive.reardrive)
.foregroundColor(.white)
Text("四驱").tag(WheelDrive.Fourwheeldrive)
.foregroundColor(.white)
Text("滑行").tag(WheelDrive.Neutral)
.foregroundColor(.white)
}
使用自定义绑定
Picker(selection: Binding(get: {selecteddrive}, set: {selecteddrive = [=10=]}), label: Text("WheelDrive")) { //<-- Here
Text("前驱").tag(WheelDrive.frontdrive)
.foregroundColor(.white)
Text("后驱").tag(WheelDrive.reardrive)
.foregroundColor(.white)
Text("四驱").tag(WheelDrive.Fourwheeldrive)
.foregroundColor(.white)
Text("滑行").tag(WheelDrive.Neutral)
.foregroundColor(.white)
}
或者您可以使用 .onChange
获取价值。
Picker(selection: $selecteddrive, label: Text("WheelDrive")) {
Text("前驱").tag(WheelDrive.frontdrive)
.foregroundColor(.white)
Text("后驱").tag(WheelDrive.reardrive)
.foregroundColor(.white)
Text("四驱").tag(WheelDrive.Fourwheeldrive)
.foregroundColor(.white)
Text("滑行").tag(WheelDrive.Neutral)
.foregroundColor(.white)
}
.onChange(of: selecteddrive, perform: { (selecteddrive) in //<- Here
print(selecteddrive)
})
当我使用按钮(ontapGesture)更改选定的驱动器时,它会打印“值已更改”,但是当我使用选择器更改值时,didset 功能不起作用。
enum WheelDrive: String, CaseIterable, Identifiable {
case frontdrive
case reardrive
case Fourwheeldrive
case Neutral
var id: String { self.rawValue }
}
@State var selecteddrive = WheelDrive.Fourwheeldrive {
willSet(newValue){ print("value changed")}
}
Picker(selection: $selecteddrive, label: Text("WheelDrive")) {
Text("前驱").tag(WheelDrive.frontdrive)
.foregroundColor(.white)
Text("后驱").tag(WheelDrive.reardrive)
.foregroundColor(.white)
Text("四驱").tag(WheelDrive.Fourwheeldrive)
.foregroundColor(.white)
Text("滑行").tag(WheelDrive.Neutral)
.foregroundColor(.white)
}
使用自定义绑定
Picker(selection: Binding(get: {selecteddrive}, set: {selecteddrive = [=10=]}), label: Text("WheelDrive")) { //<-- Here
Text("前驱").tag(WheelDrive.frontdrive)
.foregroundColor(.white)
Text("后驱").tag(WheelDrive.reardrive)
.foregroundColor(.white)
Text("四驱").tag(WheelDrive.Fourwheeldrive)
.foregroundColor(.white)
Text("滑行").tag(WheelDrive.Neutral)
.foregroundColor(.white)
}
或者您可以使用 .onChange
获取价值。
Picker(selection: $selecteddrive, label: Text("WheelDrive")) {
Text("前驱").tag(WheelDrive.frontdrive)
.foregroundColor(.white)
Text("后驱").tag(WheelDrive.reardrive)
.foregroundColor(.white)
Text("四驱").tag(WheelDrive.Fourwheeldrive)
.foregroundColor(.white)
Text("滑行").tag(WheelDrive.Neutral)
.foregroundColor(.white)
}
.onChange(of: selecteddrive, perform: { (selecteddrive) in //<- Here
print(selecteddrive)
})