文字っぽいの。

文字を書いています。写真も混ざります。

Comparable#clampがSwiftにも欲しいので作った

Comparable#clamp という便利メソッドを知った。

blog.bigbinary.com

いままではこう書いていた

let number = 100
let lowerLimit = 0
let upperLimit = 20
min(max(lowerLimit, number), upperLimit) // => 20

Swiftにもほしいと思って調べたけど、Rangeの clapmped ってのだけ出てきて見つからなかったので書いてみた。

extension Comparable {
    func clamp(to limits: ClosedRange<Self>) -> Self {
        return min(max(limits.lowerBound, self), limits.upperBound)
    }
}

これを定義しておくと最初のコードは

let number = 100
number.clamp(to: 0...20) // => 20

と書けて便利。

もうちょっと良い書き方とかあったら教えてもらえると喜びます。