我一直很難找到/理解如何比較Swift中的枚舉的定義順序的文檔。特別是當我創建一個枚舉如快速枚舉的順序和比較
enum EnumType {
case First, Second, Third
}
斯威夫特不允許我按訂單直接比較枚舉,如
let type1 = EnumType.First
let type2 = EnumType.Second
if type1 < type2 {println("good")} // error
它生成的編譯錯誤「不能援引‘<’與參數列表{EnumType,EnumType}的類型。所以,我已經找到了唯一的解決辦法就是寫我自己的比較操作過載,如
enum EnumType : Int {
case First = 0, Second, Third
}
func <(a: EnumType, b: EnumType) -> Bool {
return a.rawValue < b.rawValue
}
let type1 = EnumType.First
let type2 = EnumType.Second
if type1 < type2 {println("good")} // Returns "good"
這是一個好一個對於在我的應用程序中具有很多用途和價值的「重量級」枚舉有好處,但是對於我可能想要使用的所有操作符來說,重載過度似乎對於我可能定義的「輕量級」枚舉過於繁瑣,以便爲某些命令一個小模塊的常量。
有沒有辦法做到這一點,而無需爲我在項目中定義的每個枚舉類型編寫大量的樣板重載代碼?更妙的是,有什麼我錯過讓Swift自動提供比較運算符的簡單枚舉沒有關聯類型,即。是無類型的還是輸入爲Int? Swift知道如何比較Ints,爲什麼它不能比較枚舉Ints?
您可以使用'hashValue'屬性,如[本答案](http://stackoverflow.com/a/27094973/148357)中所述。請務必閱讀最後一條語句:) – Antonio 2015-01-09 21:28:41