1

我想打印嵌套枚举的原始值。例如,如果我有一个包含多个案例的顶级食品枚举(为简单起见,我们只说两个:水果,蔬菜),每个都是字符串枚举(水果:字符串,蔬菜:字符串等),有没有办法打印内部关联值而不在顶级枚举中执行 switch 语句?

我当前的代码如下。如您所见,我添加到 Food 的案例越多,var description 中的冗余代码就越多。我想为所有打印内部枚举的 rawValue 的情况编写一个动作。

没有开关可以吗?

enum Foods {
    case fruit(Fruit)
    case veggie(Vegetable)
 
    var description: String { // this is what I'd like to replace 
         switch self {
         case .fruit(let type):
             return type.rawValue // since every case will look like this
         case .veggie(let type):
             return type.rawValue
         }
    }
}

enum Fruit: String {
    case apple = "Apple"
    case banana = "Banana"
}

enum Vegetable: String {
    case carrot = "Carrot"
    case spinach = "Spinach"
}
4

1 回答 1

1

没有开关可以吗?

不,这目前是不可能的。


解决方法:我注意到您的枚举案例名称的模式。每个的原始值都是 case name 的大写版本i.e. case apple = "Apple"。如果此模式始终成立,您可以使用以下代码:

var description: String { ("\(self)".split(separator: ".").last?.dropLast().capitalized)! }

这将产生:

print(Foods.fruit(.apple).description) // Apple
于 2020-10-21T21:22:11.353 回答