Given:
let a = 4.2
let b = -1.3
let c = 6.4
我想知道将这些值限制在给定范围内的最简单、最快捷的方法,例如0...5
,这样:
a -> 4.2
b -> 0
c -> 5
我知道我可以执行以下操作:
let clamped = min(max(a, 0), 5)
或者类似的东西:
let clamped = (a < 0) ? 0 : ((a > 5) ? 5 : a)
但我想知道是否有其他方法可以在 Swift 中做到这一点——特别是,我想知道(以及有关 SO 的文档,因为似乎不存在关于 Swift 中的数字限制的问题)是否有任何东西Swift 标准库专门用于此目的。
可能不会,如果有的话,这也是我很乐意接受的答案。
斯威夫特 4/5
的扩展Comparable/Strideable
如同ClosedRange.clamped(to:_) -> ClosedRange
来自标准 Swift 库。
extension Comparable {
func clamped(to limits: ClosedRange<Self>) -> Self {
return min(max(self, limits.lowerBound), limits.upperBound)
}
}
#if swift(<5.1)
extension Strideable where Stride: SignedInteger {
func clamped(to limits: CountableClosedRange<Self>) -> Self {
return min(max(self, limits.lowerBound), limits.upperBound)
}
}
#endif
Usage:
15.clamped(to: 0...10) // returns 10
3.0.clamped(to: 0.0...10.0) // returns 3.0
"a".clamped(to: "g"..."y") // returns "g"
// this also works (thanks to Strideable extension)
let range: CountableClosedRange<Int> = 0...10
15.clamped(to: range) // returns 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)