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 Int
s:
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 Float
s:
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 Comparable
protocole, que ce soit String
, Character
ou l'un de vos fichiers class
ou 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 Dictionary
ou 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).