У меня возникли проблемы с поиском/пониманием документации о том, как сравнивать перечисления в 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? Свифт знает, как сравнивать Интс, так почему он не может сравнить enum Ints?