这是我的枚举:
enum myEnum : Int {
case apple = 0
case orange
case lemon
}
我想从数组中创建它。 数组元素可以是枚举的名称。
let myEnumDictionary : Array<String> = ["apple","orange","lemon"]
那么可以从数组中创建枚举吗?
答案 0 :(得分:9)
不,这是不可能的。以同样的方式,您无法从数组创建类。
必须编译枚举。你无法动态创建它们。
答案 1 :(得分:1)
如果你的枚举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]