Ras*_*sto 5 enums compiler-errors equality switch-statement swift
看起来 Swift 中的枚举无法比较相等性。这是我期望工作的代码:
let areEqual = MyEnum.SomeEnumValue == MyEnum.SomeEnumValue
Run Code Online (Sandbox Code Playgroud)
但是,这不会编译并抛出错误:Cannot invoke '==' with an argument list of type '(MyEnum, MyEnum)'
。
是否可以使用==
运算符比较 2 个枚举值,或者我真的为此编写 switch-case 吗?
编辑
这是自包含的示例。只要将它传递到游乐场,您应该会看到编译错误。
import UIKit
enum MyEnum {
case SomeValue(Int)
case OtherValue(Double)
case ThirdValue
}
let areEqual = MyEnum.ThirdValue == MyEnum.ThirdValue
Run Code Online (Sandbox Code Playgroud)
看起来有点像 Swift bug,因为它可以让您比较没有关联值的枚举而不会出现任何抱怨。所以我希望这不是预期的行为(允许比较一些枚举,但不允许比较其他枚举)。
这对我有用:
enum CompassPoint {
case North
case South
case East
case West
}
let isEqual = CompassPoint.North == CompassPoint.South
//false
Run Code Online (Sandbox Code Playgroud)
另一个例子:
enum CompassPoint: Int {
case North = 1, South, East, West
}
let isEqual = CompassPoint.North == CompassPoint.South
//false
Run Code Online (Sandbox Code Playgroud)
这也将起作用:
enum MyEnum {
case SomeValue
case OtherValue
case ThirdValue
}
let areEqual = MyEnum.ThirdValue == MyEnum.ThirdValue
Run Code Online (Sandbox Code Playgroud)
但你的示例枚举有不同的类型。您只能比较分配给他们的各种内容。
归档时间: |
|
查看次数: |
2470 次 |
最近记录: |