【发布时间】:2015-01-09 21:17:48
【问题描述】:
我很难找到/理解有关如何在 Swift 中按定义顺序比较枚举的文档。特别是当我创建一个枚举时,例如
enum EnumType {
case First, Second, Third
}
Swift 不允许我直接按顺序比较枚举,比如
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,为什么不能比较 enum Ints?
【问题讨论】:
-
您可以使用
hashValue属性,如this answer 中所述。请务必阅读最后一条声明:)