З Swift 5, max(_:_:)
і min(_:_:)
є частиною глобальних числових функцій . max(_:_:)
має таку заяву:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Ви можете використовувати його так із Int
s:
let maxInt = max(5, 12) // returns 12
Також зауважте, що існують і інші функції, які називаються, max(_:_:_:_:)
і min(_:_:_:_:)
це дозволяє порівняти ще більше параметрів. max(_:_:_:_:)
має таку заяву:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Ви можете використовувати його так із Float
s:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Зі Свіфтом, однак, ви не обмежені у використанні max(_:_:)
та його братів та сестер із числами. Насправді ці функції є загальними і можуть приймати будь-який тип параметрів, який відповідає Comparable
протоколу, може бути String
, Character
або одним із ваших власних class
абоstruct
.
Таким чином, наступний зразок коду дитячої площадки прекрасно працює:
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"
Крім того, якщо ви хочете отримати елемент min / max елементів, які знаходяться всередині елементів Array
a, a Set
, a Dictionary
чи будь-якої іншої послідовності Comparable
елементів, ви можете використовувати методи max () або min () (див. Цю відповідь на переповнення стека для отримання додаткової інформації деталі).