2014-09-12 73 views
3

這裏是我的枚舉:是否可以在Swift中從Array <String>生成枚舉?

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

我想從一個數組創建它。 數組元素可以是枚舉的名稱。

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

那麼有可能從數組中創建枚舉嗎?

回答

6

不,這是不可能的。以同樣的方式,你不能從數組創建類。

枚舉必須進行編譯。你不能動態創建它們。

0

如果枚舉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]