我有一个扩展名,它可以帮助我使用min和max来限制一个值。在不同的场景中,我需要使用不同的类型,如Int,Float,Double,CGFloat。为此,我创建了多个扩展,如下所示。
extension Int {
func clamp(min: Int, _ max: Int) -> Int {
return Swift.max(min, Swift.min(max, self))
}
}
extension CGFloat {
func clamp (min: CGFloat, _ max: CGFloat) -> CGFloat {
return Swift.max(min, Swift.min(max, self))
}
}
那么,如何通过使用仅确认采用数值的泛型类型T来使其更通用?
答案 0 :(得分:2)
这是我使用的扩展程序。它使用嵌套条件而不是最大/最小方法。这允许它可能使其中一个分支短路,这可以提高性能(如果重要的话)。
extension Comparable {
func clamped(to r: ClosedRange<Self>) -> Self {
let min = r.lowerBound, max = r.upperBound
return self < min ? min : (max < self ? max : self)
}
}
10.clamped(to: 0...5) // => 5