1

我最近在 SwiftUI 中更改了一些选择器代码以使用 CaseIterable Enum 而不是项目数组。

这是枚举:

enum ReturnTypes : String, CaseIterable {
    case Scaler
    case Vector
    case Matrix
}

这是选择器代码:

        NavigationView {
            Form {
                Picker("Return Type:", selection: $task.returnType) {
                    ForEach(ReturnTypes.allCases, id: \.self) { type in
                        Text(type.rawValue)
                    }
                }
            }
         }

当我以前将数据放在数组中并使用时

let returnTypes = ["Scaler", "Vector", "Matrix"]
...
                Picker("Return Type:", selection: $task.returnType) {
                    ForEach(0..<returnTypes.count, id: \.self) {
                        Text(returnTypes[$0])
                    }
                }

task.returnType 的当前值显示在 V 形旁边的表单的选取器行上。使用枚举,task.returnType 不会显示在 V 形旁边,当我深入到选取器选择视图时,没有检查任何内容,即使我选择了一个项目,我仍然没有在 V 形旁边显示任何内容。还有其他人遇到这个问题吗?

4

1 回答 1

2

选择必须与选择器数据类型相同,而不是文本标签,如下面的工作示例所示。使用 Xcode 11.4 / iOS 13.4 测试。

演示

struct ContentView: View {
        @State private var returnType: ReturnTypes = .Scaler
        var body: some View {
        NavigationView {
            Form {
                Picker("Return Type:", selection: $returnType) {
                    ForEach(ReturnTypes.allCases, id: \.self) { type in
                        Text(type.rawValue)
                    }
                }
            }
         }
    }
}
于 2020-05-07T19:01:23.017 回答