通过rawValue只用一个case初始化枚举

时间:2015-02-27 14:58:09

标签: swift enums

我正在开发合同,我们有一条包含枚举的消息,但它只有一个可能的值。为了将来证明,我想确保使用枚举,以便可能添加的任何其他值不需要大量工作。所以我这样做了:

enum MyEnumeration: String {
    case Case1 = "ValueFromContract"
}

当我正在阅读该消息时,我试图像这样初始化我的枚举:

let myEnum = MyEnumeration(rawValue: "ValueFromContract")
然后将 myEnum设置为值Some,这显然不是我想要的。我正在开发Xcode 6.1.1,这在Swift的更高版本中可能不是问题。

3 个答案:

答案 0 :(得分:0)

如果枚举只有一个案例,显然你无法通过rawValue进行初始化。所以我必须这样做:

enum MyEnumeration: String {
    case Case1 = "ValueFromContract"
    case Unknown = "Unknown"
}

然后rawValue初始化程序工作正常:

let myEnum = MyEnumeration(rawValue: "ValueFromContract")

不确定它是否按设计,但很高兴知道...

答案 1 :(得分:0)

使用Xcode 6.1.1创建具有单个值的枚举没有任何困难:

enum MyEnumeration: String {
    case Case1 = "ValueFromContract"
}

请注意MyEnumeration(rawValue: "ValueFromContract")返回一个可选项,因为您传递的字符串可能不是该枚举的有效rawValue。您必须打开该可选项才能使用它。我在这里使用可选绑定:

if let myEnum = MyEnumeration(rawValue: "ValueFromContract") {
    if myEnum == .Case1 {
        println("\(myEnum.rawValue)")  // This does print "ValueFromContract"
    }
}

答案 2 :(得分:0)

要么你写

let myEnum = MyEnumeration(rawValue: "ValueFromContract")!

let myEnum: MyEnumeration = .Case1

无论如何,我只在一个只有一个值的枚举中看不到多少意义。