swift4で宇宙船演算子を実装してufo気分を味わう


ソート処理を書いていたんですが、複雑なソートになると記述が非常にめんどくさくって。
rubyやphpにある宇宙船演算子が欲しいんですが……swiftにはない!
ないけれども、新しく実装することは出来る。ならやるしかない

この記事でも参考があるんですが、swift4になると動かなくなるので。

実装例!

ufo.swift
infix operator <=>: UfoPrecedence

precedencegroup UfoPrecedence {
    associativity: left
}

public func <=> <T: Comparable>(lhs: T, rhs: T) -> Int {
    if (lhs == rhs) {
        return 0
    }

    return lhs > rhs ? 1 : -1
}

実行結果

cattle_mutilation.swift
0 <=> 1 // -1
1 <=> 1 //  0
2 <=> 1 //  1

これで楽々ソート処理に!