我一直很难找到/理解如何比较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