Swift 为Int、Double、CGFloat创建泛型扩展
我有一个扩展,它可以帮助我将一个值的范围限定为最小值和最大值。在不同的情况下,我需要使用不同的类型,如Int、Float、Double、CGFloat。为此,我创建了多个扩展,如下所示Swift 为Int、Double、CGFloat创建泛型扩展,swift,swift-extensions,Swift,Swift Extensions,我有一个扩展,它可以帮助我将一个值的范围限定为最小值和最大值。在不同的情况下,我需要使用不同的类型,如Int、Float、Double、CGFloat。为此,我创建了多个扩展,如下所示 extension Int { func clamp(min: Int, _ max: Int) -> Int { return Swift.max(min, Swift.min(max, self)) } } extension CGFloat { func cl
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使其更通用呢?下面是我使用的扩展名。它使用嵌套条件而不是max/min方法。这允许它潜在地短路其中一个分支,如果有必要的话,这可以提高性能
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
谢谢你的回答。