1

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

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

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

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

4

4 回答 4

5

String您可以为将 a作为参数的枚举创建一个初始化程序。从那里,您切换字符串以将 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
于 2015-06-09T20:13:15.730 回答
2

周围没有编译器来检查详细信息,但类似于:

enum Food { case Pizza="Pizza", Pancakes="Pancakes" }
let str = "Pizza"
let food = Food(rawValue:str)
于 2015-06-09T20:10:38.533 回答
1

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

于 2015-06-09T20:04:00.350 回答
1

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

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)
于 2015-06-12T23:09:47.593 回答