Con Swift 5, max(_:_:)
e min(_:_:)
fanno parte delle funzioni numeriche globali . max(_:_:)
ha la seguente dichiarazione:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Puoi usarlo in questo modo con Int
s:
let maxInt = max(5, 12) // returns 12
Nota anche che ci sono altre funzioni chiamate max(_:_:_:_:)
e min(_:_:_:_:)
che ti permettono di confrontare ancora più parametri. max(_:_:_:_:)
ha la seguente dichiarazione:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Puoi usarlo in questo modo con Float
s:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Con Swift, tuttavia, non sei limitato all'uso max(_:_:)
e ai suoi fratelli con i numeri. In effetti, queste funzioni sono generiche e possono accettare qualsiasi tipo di parametro conforme al Comparable
protocollo, che sia String
, Character
o uno dei tuoi file class
o struct
.
Pertanto, il seguente codice di esempio Playground funziona perfettamente:
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"
Inoltre, se si desidera ottenere l'elemento min / max di elementi che si trovano all'interno di una Array
, a Set
, a Dictionary
o qualsiasi altra sequenza di Comparable
elementi, è possibile utilizzare i metodi max () o min () (vedere questa risposta di Stack Overflow per ulteriori informazioni dettagli).