根据苹果关于使用枚举来创建 SwiftUI 中的 Picker的文档,如果该枚举除了
CaseIterable
协议外还符合Identifiable
协议,那么遍历所有情况的选择器应该本地更新绑定变量。 我进行了测试,但结果并不如预期。enum Flavor: String, CaseIterable, Identifiable {
case chocolate
case vanilla
case strawberry
var id: String { self.rawValue }
}
struct EnumView: View {
@State private var selectedFlavor = Flavor.chocolate
var body: some View {
VStack {
Picker("Flavor", selection: $selectedFlavor) {
ForEach(Flavor.allCases) { flavor in
Text(flavor.rawValue.capitalized)//.tag(flavor)
}
}
Text("Selected flavor: \(selectedFlavor.rawValue)")
}
}
}
不过,如果我为每个视图传递一个tag
标记,它就能正常工作。
selectedFlavor
变量期望一个Flavor
类型的值,但是在选择器中使用的id实际上是一个String
。谢谢。