В C/ Objective-C можно найти минимальное и максимальное значение между двумя числами, используя макросы MIN и MAX. Swift не поддерживает макросы и кажется, что в библиотеке языка/базы нет эквивалентов. Если вы идете с помощью специального решения, возможно, на основе таких дженериков, как один?
Быстрый эквивалент для макросов MIN и MAX
Ответ 1
min
и max
уже определены в Swift:
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
Посмотрите эту замечательную запись на задокументированные и недокументированные встроенные функции в Swift.
Ответ 2
Как указано, Swift предоставляет функции max
и min
.
Пример (обновлен для Swift 2.x).
let numbers = [ 1, 42, 5, 21 ]
var maxNumber = Int()
for number in numbers {
maxNumber = max(maxNumber, number as Int)
}
print("the max number is \(maxNumber)") // will be 42
Ответ 3
С Swift, min
и max
являются частью Справочник по функциям стандартных ссылок Swift.
max(_:_:)
имеет следующее объявление:
func max<T : Comparable>(_ x: T, _ y: T) -> T
Вы можете использовать его так: Int
:
let maxInt = max(5, 12) // returns 12
Существует вторая функция, называемая max(_:_:_:_:)
, которая позволяет сравнивать еще больше параметров. max(_:_:_:_:)
принимает вариационный параметр и имеет следующее объявление:
func max<T : Comparable>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T
Вы можете использовать его так: Float
:
let maxInt = max(12.0, 18.5, 21, 15, 26, 32.9, 19.1) // returns 32.9
Однако с помощью Swift вы не ограничены использованием max(_:_:)
, max(_:_:_:_:)
и их копий min
с Int
, Float
или Double
. Фактически эти функции являются общими и могут принимать любой тип параметра, который соответствует протоколу Comparable
, может быть String
, Character
или один из ваших пользовательских class
или struct
. Таким образом, следующие коды площадки прекрасно работают:
let maxString = max("Car", "Boat") // returns "Car" (alphabetical order)
class Route: Comparable, CustomStringConvertible {
let distance: Int
var description: String { return "Route with distance: \(distance)" }
init(distance: Int) {
self.distance = distance
}
}
func ==(lhs: Route, rhs: Route) -> Bool {
return lhs.distance == rhs.distance
}
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"
Кроме того, если вы хотите получить максимальный элемент элементов, который находится внутри Array
, a Set
, a Dictionary
или любой другой последовательности, вы можете использовать maxElement() или методы maxElement (_:). Подробнее см. этот ответ.
Ответ 4
SWIFT 4 Синтаксис немного изменился:
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T) -> T where T : Comparable
и
public func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Поэтому, когда вы его используете, вы должны написать, как в этом примере:
let min = 0
let max = 100
let value = -1000
let currentValue = Swift.min(Swift.max(min, value), max)
Итак, вы получаете значение от 0 до 100, не имеет значения, если оно ниже 0 или выше 100.
Ответ 5
Попробуйте это.
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")