繁体   English   中英

为什么 Property Observer 不适用于 SwiftUI 中的 Picker

[英]Why Property Observer does not work for Picker in SwiftUI

当我使用按钮(ontapGesture)更改选定的驱动器时,它会打印“值已更改”,但是当我使用 Picker 更改值时,didset function 不起作用。

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 = $0}), 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)
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM