2014-10-04 104 views
4

看起来像Swift中的Enumerations不能进行相等的比较。下面是代码我预期的那样工作:如何比较相同枚举的值? (==比较不起作用!)

let areEqual = MyEnum.SomeEnumValue == MyEnum.SomeEnumValue 

然而,这并不编译,并抛出错误:Cannot invoke '==' with an argument list of type '(MyEnum, MyEnum)'

是否可以使用==运算符来比较2个枚举值,还是我真的为此编写了switch-case?


EDIT

下面是一个包含自例子。刚过它去操场,你应该看到编译错误。

import UIKit 

enum MyEnum { 
    case SomeValue(Int) 
    case OtherValue(Double) 
    case ThirdValue 
} 

let areEqual = MyEnum.ThirdValue == MyEnum.ThirdValue 

看起来有点像雨燕的错误,因为它可以让你比较不具有关联值不抱怨枚举。所以我希望这不是预期的行为(允许比较一些列举而不是其他列举)。

+2

我无法重现该问题。你能展示一个(最小的)完整的,独立的例子(包括枚举定义)吗?另外,如果您想比较枚举常量或变量的值,则不清楚(对我而言)。 – 2014-10-04 19:55:02

+0

你可以发布你的完整代码吗? – 2014-10-04 19:55:40

+0

@Martin R正在工作。一会儿。 – drasto 2014-10-04 19:56:44

回答

0

这个工作对我来说:

enum CompassPoint { 
    case North 
    case South 
    case East 
    case West 
} 

let isEqual = CompassPoint.North == CompassPoint.South 
//false 

另一个例子:

enum CompassPoint: Int { 
    case North = 1, South, East, West 
} 

let isEqual = CompassPoint.North == CompassPoint.South 
//false 

这也将工作:

enum MyEnum { 
    case SomeValue 
    case OtherValue 
    case ThirdValue 
} 


let areEqual = MyEnum.ThirdValue == MyEnum.ThirdValue 

,但你的例子枚举有不同的类型。你只能比较各种分配给他们。

+0

请参阅我的编辑,了解哪些功能无法正常工作。请考虑删除这个答案,因为它解决了原始问题中提到的问题。 – drasto 2014-10-04 20:08:09