在C/Objective-C中,可以使用MIN和MAX宏找到两个数字之间的最小值和最大值.Swift不支持宏,似乎语言/库中没有等价物.每个人都应该有一个定制的解决方案,也许基于这样的仿制药进入一个?
Jac*_*ack 119
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
Run Code Online (Sandbox Code Playgroud)
在Swift中查看有关已记录和未记录的内置函数的精彩文章.
Kyl*_*egg 34
正如所指出的,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
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 18
使用Swift,max(_:_:)它min(_:_:)是Swift标准库函数参考的一部分.
max(_:_:) 有以下声明:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它Int:
let maxInt = max(5, 12) // returns 12
Run Code Online (Sandbox Code Playgroud)
有一个名为的第二个函数max(_:_:_:_:)允许您比较更多参数.min(_:_:_:_:)采用可变参数并具有以下声明:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它max(_:_:_:_:):
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Run Code Online (Sandbox Code Playgroud)
但是,对于Swift,你不仅限于使用Float,max(_:_:)而且与他们的Comparable同行一起使用String,Character或者class.实际上,这些函数是通用的,可以接受任何符合struct协议的参数类型,可能是Array,Set或者您的自定义Dictionary或Comparable.因此,以下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"
Run Code Online (Sandbox Code Playgroud)
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Run Code Online (Sandbox Code Playgroud)
此外,如果要获取max(_:_:)a,a min(_:_:),a max(_:_:)或任何其他序列内的元素的max元素,可以使用maxElement()或maxElement(_ :)方法.有关详细信息,请参阅此Stack Overflow答案.
wm.*_*1us 14
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
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
因此,当您使用它时,您应该像在此示例中一样编写:
let min = 0
let max = 100
let value = -1000
let currentValue = Swift.min(Swift.max(min, value), max)
Run Code Online (Sandbox Code Playgroud)
因此,如果低于0或高于100,则从0到100得到的值无关紧要.