如何从字符串创建枚举

How to create enum from a String

在 Swift 2 中,您可以从字符串创建枚举吗?

enum Food : Int { case Pizza, Pancakes }
let str = "Pizza"
let food = Food(name:str)   // for example

最后一行不起作用,但我正在寻找类似的东西。就像在 Java 中一样,您可以说 Food.valueOf("Pizza").

编辑:我不能使用字符串作为原始值。

您可以设置原始值为字符串的枚举,然后通过指定原始值创建枚举。这与您的要求很接近。

周围没有编译器来检查细节,但像这样:

enum Food { case Pizza="Pizza", Pancakes="Pancakes" }
let str = "Pizza"
let food = Food(rawValue:str)

您可以为采用 String 作为参数的枚举创建初始化程序。从那里,您切换字符串以将 self 的值设置为特定大小写,如下所示:

enum Food: Int {
    case None, Pizza, Pancakes


    init(string: String) {
        switch string {
        case "Pizza":
            self = .Pizza
        default:
            self = .None
        }
    }
}

let foo = Food(string: "") // .None
let bar = Food(string: "Pizza") // .Pizza

Ian 的回答很好,但根据您的需要,您可能更喜欢带有可失败初始化程序的枚举:

enum Food: Int {

    case Pizza, Pancakes

    init?(name: String) {
        switch name {
        case "Pizza":       self = .Pizza
        case "Pancakes":    self = .Pancakes
        default:            return nil
        }
    }

}

let pizzaString = "Pizza"
let food = Food(name: pizzaString) // returns .Pizza (optional)
print(food?.rawValue) // returns 0 (optional)