【发布时间】:2014-11-06 19:12:36
【问题描述】:
这是我的枚举:
enum myEnum : Int {
case apple = 0
case orange
case lemon
}
我想从一个数组中创建它。 数组元素可以是枚举的名称。
let myEnumDictionary : Array<String> = ["apple","orange","lemon"]
那么可以从数组中创建枚举吗?
【问题讨论】:
这是我的枚举:
enum myEnum : Int {
case apple = 0
case orange
case lemon
}
我想从一个数组中创建它。 数组元素可以是枚举的名称。
let myEnumDictionary : Array<String> = ["apple","orange","lemon"]
那么可以从数组中创建枚举吗?
【问题讨论】:
不,这是不可能的。同样的,你不能从数组中创建类。
必须编译枚举。您不能动态创建它们。
【讨论】:
如果你的枚举 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]
【讨论】: