Ios 转换为枚举的Swift整数类型

Ios 转换为枚举的Swift整数类型,ios,swift,enums,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) 但如果我必须在某个无法预测整数值的委托中调用它,那么

我有
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不能转换为'OP\u code'
。在这里尝试了许多排列。但是无法计算出来。

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

enum OP_CODE: Int {
    case addition, substraction, multiplication, division
}
加法
的原始值为
0
减法
的原始值为
1
,依此类推

然后你就可以做了

if let code = OP_CODE(rawValue: indexPath.row) {
    self.delegate.performOperation(code)
} else {
   // invalid code
}
更多信息请点击此处:


对于较旧的swift版本 如果您使用的是旧版本的swift,则原始枚举的工作方式会有所不同。在Xcode<6.1中,必须使用
fromRaw()
而不是一个可失败的初始值设定项:

let code = OP_CODE.fromRaw(indexPath.row)
您可以在枚举中使用:

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的答案和相关评论。

尝试过。出现错误
OP_代码无法构建它没有可访问的初始值设定项
-请简要说明一下。我可能输入了一个拼写错误,现在就试试。我尝试了代码,它在我这边工作,您使用的是哪个版本的Xcode?Xcode-6.0.1版(6A317)和OS X Yosemite 10.10版,这是一个旧版本,在这种情况下,您可以使用
OP\u code.fromRaw(indexPath.row)
,但您确实应该升级到6.1Thanks以获得快速帮助。