从价值中获取枚举

Ner*_*tor 3 enums ios swift

我enum在Swift中有一个问题.我宣布我的枚举是这样的:

enum FirstEnum : CustomStringConvertible {
    case VALUE1
    case VALUE2
    case VALUE3

    var description: String {
        switch self {
            case .VALUE1:
                return "First value"
            case .VALUE2:
                return "Second value"
            case .VALUE3:
                return "Third value"
        }
    }

    func getFromCode(value:String) -> FirstEnum? {
        switch value {
            case "v1":
                return FirstEnum.VALUE1
            case "v2":
                return FirstEnum.VALUE2
            case "v3" :
                return FirstEnum.VALUE3
        }
    }
Run Code Online (Sandbox Code Playgroud)

我需要从字符串(如字典)获取枚举,所以我希望这行应该工作:

let foo = FirstEnum.getFromCode("v1") 
Run Code Online (Sandbox Code Playgroud)

但是XCode(7)期望FirstEnum方法的参数getFromCode改为String方法定义中声明的参数,说:

无法将"String"类型的值转换为预期的参数类型"FirstEnum"

为什么这样?......我做错了什么?

Ars*_*sen 5

使用Failable Initializers进行枚举

您可以使用可用的初始化程序根据一个或多个参数选择适当的枚举成员.如果提供的参数与适当的枚举成员不匹配,则初始化程序可能会失败.

下面的示例定义了一个名为TemperatureUnit的枚举,它有三种可能的状态(开尔文,摄氏和华氏).可用的初始值设定项用于为表示温度符号的Character值查找适当的枚举成员:

enum TemperatureUnit {
    case Kelvin, Celsius, Fahrenheit
    init?(symbol: Character) {
        switch symbol {
        case "K":
            self = .Kelvin
        case "C":
            self = .Celsius
        case "F":
            self = .Fahrenheit
        default:
            return nil
        }
    }
}
Run Code Online (Sandbox Code Playgroud)