Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为Int、Double、CGFloat创建泛型扩展_Swift_Swift Extensions - Fatal编程技术网

Swift 为Int、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

我有一个扩展,它可以帮助我将一个值的范围限定为最小值和最大值。在不同的情况下,我需要使用不同的类型,如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使其更通用呢?

下面是我使用的扩展名。它使用嵌套条件而不是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

谢谢你的回答。