В Swift 5 max(_:_:)
и min(_:_:)
являются частью глобальных числовых функций . max(_:_:)
имеет следующее объявление:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Вы можете использовать это с Int
s:
let maxInt = max(5, 12) // returns 12
Также отметим , что существуют и другие функции , которые вызываются max(_:_:_:_:)
и min(_:_:_:_:)
что позволяет сравнивать даже больше параметров. max(_:_:_:_:)
имеет следующее объявление:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Вы можете использовать это с Float
s:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Однако со Swift вы не ограничены в использовании max(_:_:)
и его собратьях с числами. На самом деле, эти функции являются общими и могут принимать параметры любого типа , который соответствует Comparable
протоколу, это может быть String
, Character
или один из пользовательских class
или struct
.
Таким образом, следующий пример кода Playground отлично работает:
class Route: Comparable, CustomStringConvertible {
let distance: Int
var description: String {
return "Route with distance: \(distance)"
}
init(distance: Int) {
self.distance = distance
}
static func ==(lhs: Route, rhs: Route) -> Bool {
return lhs.distance == rhs.distance
}
static func <(lhs: Route, rhs: Route) -> Bool {
return lhs.distance < rhs.distance
}
}
let route1 = Route(distance: 4)
let route2 = Route(distance: 8)
let maxRoute = max(route1, route2)
print(maxRoute) // prints "Route with distance: 8"
Кроме того, если вы хотите получить элемент min / max элементов, которые находятся внутри Array
, a Set
, a Dictionary
или любой другой последовательности Comparable
элементов, вы можете использовать методы max () или min () (см. Этот ответ о переполнении стека для получения дополнительной информации подробности).