gpt4 book ai didi

swiftui - SwiftUI 中可选数据类型的选择器?

转载 作者:行者123 更新时间:2023-12-02 15:51:53 25 4
gpt4 key购买 nike

通常我可以在 SwiftUI 中显示这样的项目列表:

enum Fruit {
case apple
case orange
case banana
}

struct FruitView: View {

@State private var fruit = Fruit.apple

var body: some View {
Picker(selection: $fruit, label: Text("Fruit")) {
ForEach(Fruit.allCases) { fruit in
Text(fruit.rawValue).tag(fruit)
}
}
}
}

这非常有效,让我可以选择我想要的任何水果。但是,如果我想将 fruit 切换为可为空(也称为可选),则会导致问题:

struct FruitView: View {

@State private var fruit: Fruit?

var body: some View {
Picker(selection: $fruit, label: Text("Fruit")) {
ForEach(Fruit.allCases) { fruit in
Text(fruit.rawValue).tag(fruit)
}
}
}
}

所选的水果名称不再显示在第一屏上,并且无论我选择什么选择项,都不会更新水果值。

如何将选取器与可选类型一起使用?

最佳答案

当绑定(bind)包装时,标记必须与确切的数据类型匹配。在本例中,提供给 tag 的数据类型是 Fruit,但 $fruit.wrappedValue 的数据类型是 Fruit? >。您可以通过在 tag 方法中转换数据类型来解决此问题:

struct FruitView: View {

@State private var fruit: Fruit?

var body: some View {
Picker(selection: $fruit, label: Text("Fruit")) {
ForEach(Fruit.allCases) { fruit in
Text(fruit.rawValue).tag(fruit as Fruit?)
}
}
}
}

奖励:如果您想要为 nil 自定义文本(而不仅仅是空白),并且希望允许用户选择 nil (注意:这里要么全有,要么全无),您可以包含一个 nil 项目:

struct FruitView: View {

@State private var fruit: Fruit?

var body: some View {
Picker(selection: $fruit, label: Text("Fruit")) {
Text("No fruit").tag(nil as Fruit?)
ForEach(Fruit.allCases) { fruit in
Text(fruit.rawValue).tag(fruit as Fruit?)
}
}
}
}

不要忘记转换 nil 值。

关于swiftui - SwiftUI 中可选数据类型的选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59348093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com