Adicionar um “operador de nave espacial” semelhante ao Ruby ao Swift

Isso fornece um “operador de nave espacial” semelhante ao Ruby ( <=>) para o Swift. Para um Swift mais idiomático, ele usa um enum, no entanto, se você realmente quiser, pode usar o fornecido rawValueda mesma forma que faria em Ruby:

import Foundation

enum Compare: Int {
case Right = -1, Equal, Left
}

infix
operator <=> {}

func
<=> <T: Comparable>(left: T, right: T) -> Compare {
if left == right {
return .Equal
} else if left > right {
return .Left
} else {
return .Right
}
}

1 <=> 1 // .Equal
2.4 <=> 2.9 // .Right
"b" <=> "a" // .Left
(0 <=> 1).rawValue // -1

switch 0 <=> 1 {
case .Equal, .Left: print("That's odd")
default: print("All good")
}
// prints "All good"