微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift-嵌套枚举-如何对所有具有关联值的嵌套枚举执行相同的操作?

如何解决Swift-嵌套枚举-如何对所有具有关联值的嵌套枚举执行相同的操作?

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

我当前的代码如下。如您所见,我向Food添加的案例越多,越多的冗余代码将最终出现在var描述中。我想为所有情况写一个动作,以打印内部枚举的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"
}

解决方法

没有开关就可以吗?

否,目前无法实现。


解决方法: 我注意到您的枚举案例名称存在一个模式。每个实例的原始值都是案例名称i.e. case apple = "Apple"的所有大写形式。如果此模式始终有效,则可以使用以下代码:

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

哪个会产生:

print(Foods.fruit(.apple).description) // Apple

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。