swiftのComparableプロトコルはEquatableプロトコルを継承しているので、Comparableと同じことがしたいがEquatableは実装したくないという時に使えない。
その場合、Comparableに相当するプロトコルだけを自分で実装すれば良い。
public protocol ComparableIndex { static func LessIndex(_ lhs: Self, _ rhs: Self) -> Bool } extension Array where Element : ComparableIndex { mutating func sortWithIndex() { self.sort(by: { (a, b) in Element.LessIndex(a, b) }) } }
これは、Arrayを独自の関数LessIndexで比較してソートする関数を追加するエクステンションである。