Elegant `bounded` methodology in Swift

前端 未结 3 1634
悲哀的现实
悲哀的现实 2021-01-23 11:09

I\'m looking for a more elegant way to create bounded limiters for numbers, primarily to be used in setters. There are plenty of techniques for determining whether a value falls

3条回答
  •  -上瘾入骨i
    2021-01-23 11:48

    I would generalize this extension to any Comparable, so that more types can benefit from it. Also, I would change the parameter to be a ClosedRange rather than two separate Self parameters, because that's the more common way of handling ranges in Swift. That'll come in especially handy when dealing with array indices.

    extension Comparable {
        func clamped(to r: ClosedRange) -> Self {
            let min = r.lowerBound, max = r.upperBound
            return self < min ? min : (max < self ? max : self)
        }
    }
    
    // Usage examples:
    10.clamped(to: 0...5) // => 5
    "a".clamped(to: "x"..."z") // => "x"
    -1.clamped(to: 0...1) // => 0
    

提交回复
热议问题