extension Collection { func sorted<Result: Comparable>(_ comparing: (Result, Result) -> Bool, _ data: (Element) -> Result) -> [Element] { sorted { comparing(data($0), data($1)) } } } // 面積 [CGRect()].sorted(<, { $0.width * $0.height })
とりあえず考えてみたものの単純な例を実装してみた(Comparableだけど) (edited)