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以获得快速帮助。