如何从String创建枚举

时间:2015-06-09 19:59:48

标签: swift enums swift2

在Swift 2中,你可以用字符串创建一个枚举吗?

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

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

修改:我无法使用字符串作为原始值。

4 个答案:

答案 0 :(得分:5)

您可以为枚举创建一个初始化程序,以language: go script: make VERSION=$TRAVIS_TAG go: - 1.4.1 deploy: provider: releases api_key: secure: reallylongsecurestring file: releasebin skip_cleanup: true on: tags: true 作为参数。从那里,您切换字符串以将self的值设置为特定情况,如下所示:

String

答案 1 :(得分:2)

不要有编译器检查细节,但是:

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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)