在 Swift 2 中,您可以从字符串创建枚举吗?
enum Food : Int { case Pizza, Pancakes }
let str = "Pizza"
let food = Food(name:str) // for example
最后一行不起作用,但我正在寻找类似的东西。就像在 Java 中一样,你可以说Food.valueOf("Pizza")
.
编辑:我不能使用字符串作为原始值。
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
周围没有编译器来检查详细信息,但类似于:
enum Food { case Pizza="Pizza", Pancakes="Pancakes" }
let str = "Pizza"
let food = Food(rawValue:str)
您可以设置原始值为字符串的枚举,然后通过指定原始值来创建枚举。这接近你所要求的。
伊恩的回答很好,但根据您的需要,您可能更喜欢带有可失败初始化程序的枚举:
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)