Z Swift 5 max(_:_:)i min(_:_:)są częścią Global Numeric Functions . max(_:_:)posiada następującą deklarację:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Możesz go używać w ten sposób z Ints:
let maxInt = max(5, 12) // returns 12
Należy również pamiętać, że istnieją inne funkcje wywoływane max(_:_:_:_:)i min(_:_:_:_:)że pozwala porównać nawet więcej parametrów. max(_:_:_:_:)posiada następującą deklarację:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Możesz go używać w ten sposób z Floats:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Jednak dzięki Swift nie jesteś ograniczony do używania max(_:_:)i jego rodzeństwa z liczbami. W rzeczywistości te funkcje są ogólne i mogą akceptować dowolny typ parametru, który jest zgodny z Comparableprotokołem, może to być String, Characterlub jeden z niestandardowych classlub struct.
W związku z tym następujący przykładowy kod Playground działa idealnie:
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"
Ponadto, jeśli chcesz uzyskać element min / max elementów, które znajdują się wewnątrz sekwencji elementów an Array, a Set, a Dictionarylub dowolnej innej sekwencji Comparable, możesz użyć metod max () lub min () (zobacz odpowiedź przepełnienia stosu, aby uzyskać więcej informacji Detale).