enum Operator: Character {
case Substract = "-"
case Add = "+"
case Multiply = "*"
case Divide = "/"
}
Run Code Online (Sandbox Code Playgroud)
我有上面的枚举和下面声明的函数,它检查我们是否有有效的运算符.例如isOperator("+")
func isOperator(_ symbol: Character)-> Operator? {
let op = Operator(rawValue: symbol)
switch op {
case .Substract, .Add, .Multiply, .Divide:
return op
default:
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
这里的编译器返回的是"在类型中找不到枚举的情况"意味着在我的switch语句中定义的情况(.Add .. etc)在运算符类型中不可用.为什么编译器无法找到大小写,因为op是一个运算符类型,其中swift inver类型是atuomatically?
Jay*_*eep 15
是的,因为你let op = Operator(rawValue: symbol)就是optional在switch情况下,你是匹配的精确值.所以你可以optional在case比较时申请.如下所示.
func isOperator(_ symbol: Character)-> Operator? {
let op = Operator(rawValue: symbol)
switch op {
case .Substract?, .Add?, .Multiply?, .Divide?:
return op
default:
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
你只有4种情况就可以
func isOperator(_ symbol: Character)-> Operator? {
return Operator(rawValue: symbol)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您将来会拥有更多,那么最好在使用guard之前switch
func isOperator(_ symbol: Character)-> Operator? {
guard let op = Operator(rawValue: symbol) else {
return nil
}
switch op {
case .Substract, .Add, .Multiply, .Divide:
return op
...
}
}
Run Code Online (Sandbox Code Playgroud)
在swift的最新版本swift 3中,枚举的命名约定已更改。每个枚举案例都遵循camelCase规则。
当您使用类似的函数名称时,此函数应返回isSomethingBool
| 归档时间: |
|
| 查看次数: |
4770 次 |
| 最近记录: |