swiftui - SwiftUI Picker 视图中不显示值
问题描述
我最近在 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 形旁边显示任何内容。还有其他人遇到这个问题吗?
解决方案
选择必须与选择器数据类型相同,而不是文本标签,如下面的工作示例所示。使用 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)
}
}
}
}
}
}
推荐阅读
- java - 未选中复选框时Android禁用按钮
- javascript - 我可以在完全动态加载的页面上检测到类似 document.readyState 的事件吗?
- android - Android 双向数据绑定可以与没有样板的 Room 一起使用吗?
- linux - 循环对多个文件执行命令
- asp.net - 为 asp 核心网页获取 HTTP 错误 500.30(开始导航到第一页,下一页会产生此错误)
- javascript - 提交后未发送来自 Stripe 的 TokenKey
- r - R光栅`projectExtent`“不能做这个转换”
- android - android.app.RemoteServiceException:尝试从服务发送通知时 startForeground 的错误通知
- xslt - 计算 xslt 数组中的值
- ssh - 运行包含带有屏幕的 STDIN 重定向的命令