是否可以从Swift中的Array <string>生成枚举?</string>

时间:2014-09-12 14:54:17

标签: arrays enums swift

这是我的枚举:

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

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

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

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

2 个答案:

答案 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]