如何比较相同枚举的值?(==比较不起作用!)

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,因为它可以让您比较没有关联值的枚举而不会出现任何抱怨。所以我希望这不是预期的行为(允许比较一些枚举,但不允许比较其他枚举)。

Ste*_*erg 0

这对我有用:

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)

但你的示例枚举有不同的类型。您只能比较分配给他们的各种内容。