2014-10-04 101 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