Swift整数类型转换为枚举

时间:2014-11-27 10:45:07

标签: ios swift enums

我有enum声明。

enum OP_CODE {
    case addition
    case substraction
    case multiplication
    case division
}

并在方法中使用它:

func performOperation(operation: OP_CODE) {

}

我们都知道我们如何正常称呼

self.performOperation(OP_CODE.addition)

但是如果我必须在某个委托中调用它,其中整数值不可预测而不是如何调用它。

例如:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     self.delegate.performOperation(indexPath.row)
}

此处,编译器抛出错误Int is not convertible to 'OP_CODE'。在这里尝试了许多排列。但无法弄清楚。

2 个答案:

答案 0 :(得分:18)

您需要指定枚举的原始类型

enum OP_CODE: Int {
    case addition, substraction, multiplication, division
}

addition的原始值为0substraction1,依此类推。

然后你可以做

if let code = OP_CODE(rawValue: indexPath.row) {
    self.delegate.performOperation(code)
} else {
   // invalid code
}

此处有更多信息:https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Enumerations.html#//apple_ref/doc/uid/TP40014097-CH12-XID_222


旧版快速发布

如果您使用的是较旧版本的swift,原始枚举的工作方式会有所不同。在Xcode< 6.1,你必须使用fromRaw()而不是可用的初始化器:

let code = OP_CODE.fromRaw(indexPath.row)

答案 1 :(得分:8)

您可以在枚举中使用raw values

enum OP_CODE : Int{
    case addition = 0
    case substraction = 1
    case multiplication = 2
    case division = 3
}

并使用可用的初始化程序将原始值作为输入:

let code = OP_CODE(rawValue: 2) // code == .multiplication

请注意,code是可选的,因为如果原始值未映射到有效的枚举,则初始值设定项返回nil。

在你的情况下:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let code = OP_CODE(rawValue: indexPath.row)
    if let code = code {
        self.delegate.performOperation(code)
    }
}

此外,给定枚举的实例,您可以使用rawValue属性获取关联的原始值。

注意:在Xcode 6.1中枚举有所改变 - 如果您使用的是旧版本,请阅读@ GabrielePetronella的回答和相关评论。