Con Swift 5 max(_:_:)y min(_:_:)son parte de las funciones numéricas globales . max(_:_:)tiene la siguiente declaración:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Puedes usarlo así con Ints:
let maxInt = max(5, 12) // returns 12
También tenga en cuenta que hay otras funciones llamadas max(_:_:_:_:)y min(_:_:_:_:)que le permite comparar aún más parámetros. max(_:_:_:_:)tiene la siguiente declaración:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Puedes usarlo así con Floats:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Sin embargo, con Swift, no está limitado al uso max(_:_:)y sus hermanos con números. De hecho, esas funciones son genéricas y pueden aceptar cualquier tipo de parámetro que se ajuste al Comparableprotocolo, ya sea String, Characteruno de sus personalizados classo struct.
Por lo tanto, el siguiente código de muestra de Playground funciona perfectamente:
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"
Además, si desea obtener el elemento min / max de los elementos que están dentro de una Array, a Set, a Dictionaryo cualquier otra secuencia de Comparableelementos, puede usar los métodos max () o min () (consulte esta respuesta de Stack Overflow para obtener más información) detalles).