Avec Swift 5, max(_:_:)et min(_:_:)font partie des fonctions numériques globales . max(_:_:)a la déclaration suivante:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Vous pouvez l'utiliser comme ceci avec Ints:
let maxInt = max(5, 12) // returns 12
Notez également qu'il existe d'autres fonctions appelées max(_:_:_:_:)et min(_:_:_:_:)qui vous permettent de comparer encore plus de paramètres. max(_:_:_:_:)a la déclaration suivante:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Vous pouvez l'utiliser comme ceci avec Floats:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Avec Swift cependant, vous n'êtes pas limité à l'utilisation max(_:_:)et à ses frères et sœurs avec des chiffres. En fait, ces fonctions sont génériques et peuvent accepter n'importe quel type de paramètre conforme au Comparableprotocole, que ce soit String, Characterou l'un de vos fichiers classou struct.
Ainsi, l'exemple de code Playground suivant fonctionne parfaitement:
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"
De plus, si vous souhaitez obtenir l'élément min / max des éléments qui sont à l'intérieur d'une Array, a Set, a Dictionaryou toute autre séquence d' Comparableéléments, vous pouvez utiliser les méthodes max () ou min () (voir cette réponse Stack Overflow pour plus détails).