为什么 属性 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)
})