【问题标题】:Is it possible to generate enum from Array<String> in Swift?是否可以在 Swift 中从 Array<String> 生成枚举?
【发布时间】:2014-11-06 19:12:36
【问题描述】:

这是我的枚举:

enum myEnum : Int {
    case apple = 0
    case orange
    case lemon
}

我想从一个数组中创建它。 数组元素可以是枚举的名称。

let myEnumDictionary : Array<String> = ["apple","orange","lemon"]

那么可以从数组中创建枚举吗?

【问题讨论】:

    标签: arrays enums swift


    【解决方案1】:

    不,这是不可能的。同样的,你不能从数组中创建类。

    必须编译枚举。您不能动态创建它们。

    【讨论】:

      【解决方案2】:

      如果你的枚举 rawValue 必须是一个 Int,你可以从一个整数原始值数组映射到一个枚举集合,或者添加一个方便的初始化器,它返回与给定字符串文字匹配的枚举:

      enum MyEnum : Int {
          case apple = 0
          case orange
          case lemon
      
          init?(fruit: String) {
              switch fruit {
              case "apple":
                  self = .apple
              case "orange":
                  self = .orange
              case "lemon":
                  self = .lemon
              default:
                  return nil
              }
          }
      }
      
      let myEnumDictionary = [0, 1, 2].map{ MyEnum(rawValue: $0) }.flatMap{ $0 }
      
      let myEnumDictionary2 = ["apple", "orange", "lemon"].map{ MyEnum(fruit: $0) }.flatMap{ $0 }
      

      如果枚举 rawValue 类型是字符串,则不需要提供初始化程序:

      enum MyEnum: String {
          case apple
          case orange
          case lemon
      }
      
      let myEnumDictionary = ["apple", "orange", "lemon"].map{ MyEnum(rawValue: $0) }.flatMap{ $0 }
      

      当然,创建枚举数组最简单的方法就是提供枚举的文字列表:

      let myEnumDictionary: [MyEnum] = [.apple, .orange, .lemon]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        • 2015-07-12
        • 2013-05-15
        • 1970-01-01
        • 2016-08-31
        • 2021-11-23
        • 1970-01-01
        相关资源
        最近更新 更多