Answers:
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中已记录和未记录的内置函数的精彩文章。
let a : Int = 5
并按Command +单击Int
,那么您会看到很棒的东西!
a.
和滚动浏览Xcode的完成可能性……但是“ Command + Click”才是票证!
如前所述,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
使用Swift 5,max(_:_:)
并且min(_:_:)
是Global Numeric Functions的一部分。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
但是,使用Swift时,您不仅可以使用max(_:_:)
数字及其同级符号。实际上,这些函数是通用的,可以接受符合Comparable
协议的任何参数类型,可以是String
,也可以Character
是您的自定义class
或中的一种struct
。
因此,以下Playground示例代码可以完美运行:
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"
此外,如果您想获取元素Array
,a Set
,a Dictionary
或任何其他Comparable
元素序列内的元素的min / max元素,则可以使用max()或min()方法(有关更多信息,请参见此Stack Overflow答案)细节)。
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。
Int
s,也不存在max(),然后将其更改为Swift.max,然后突然变好了,情况会更好。谢谢wm.p1us!