Zon*_*eva 2 enums picker swift swiftui
在我的应用程序中,我需要使用Picker在两个不同的地方使用 a 。在一个地方,它将属性设置为三个值之一:A、B 或 C。但是,在另一个地方,我想使用选择器来过滤项目数组以显示所有项目(无过滤器)或仅 A、B 或 C 项。
所以,我的第一次尝试是创建一个enum像这样的:
enum Category {
case all
case A
case B
case C
}
Run Code Online (Sandbox Code Playgroud)
使用它,我可以成功过滤我的列表。但是,当我尝试在数组中创建新项目时,我不想all成为一个选项。用户应该只能看到包含 A、B 和 C 的选择器。
我可以尝试:
enum Category {
case A
case B
case C
}
Run Code Online (Sandbox Code Playgroud)
但是如何添加all过滤器选择器的选项呢?
(为了解决下面的一些评论,这里有一些关于我试图完成的具体事情的更多细节......
锦标赛可以是男子、女子或混合锦标赛。在列出锦标赛的屏幕上,我希望能够显示所有锦标赛或仅显示男子锦标赛、仅显示女子锦标赛或仅显示混合锦标赛。所以,我有一个横跨 iPhone 宽度的选择器。看起来和工作都很棒。
显然,当向列表添加新项目时,我必须指定其类别,但不是“全部”。也是一个拾取器。
因此,在一种情况下,我需要三个值,在另一种情况下,我需要相同的三个值,并在开头添加“All”。)
您应该在enum不区分大小写的all情况下定义您的内容,因为它对于项目all无效。Category(这是一个名为 \xe2\x80\x9c 的编程指南,使非法状态无法表示\xe2\x80\x9d。)
enum Category: Hashable, CaseIterable {\n case a\n case b\n case c\n}\nRun Code Online (Sandbox Code Playgroud)\n有了这个定义,Picker设置项目属性的方法可以如下所示:
Picker("Category", selection: $category) {\n ForEach(Category.allCases, id: \\.self) { category in\n Text(verbatim: "\\(category)")\n .tag(category)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n那么你应该认识到你的过滤器是可选的。您可以按项目类别进行过滤,也可以不执行任何过滤。所以你的过滤器属性应该声明为可选:
\n@Binding var categoryFilter: Category?\nRun Code Online (Sandbox Code Playgroud)\n这Picker过滤器时需要小心使用可选标签:
Picker("Category Filter", selection: $categoryFilter) {\n Text("None")\n .tag(Category?.none)\n ForEach(Category.allCases, id: \\.self) { category in\n Text(verbatim: "\\(category)")\n .tag(Category?.some(category))\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |