🕊
[Swift] Swift でも clamp() したい!
Swift で clamp()
c++
には min <= x <= max
の範囲で x
の値を返却してくる clamp()
という関数があるので、それの Swift 版の紹介です。
extension Comparable {
func clamp(minValue: Self, maxValue: Self) -> Self {
min(max(minValue, self), maxValue)
}
func clamp(to range: ClosedRange<Self>) -> Self {
self.clamp(minValue: range.lowerBound, maxValue: range.upperBound)
}
}
正直、似たような記事はいくつもあったのですが、Comparable
の拡張なら ClosedRange
を用いて、表現できるとより綺麗かなと思い、投稿しました。
実際に使ってみた
使い方は以下のようになります。
let minValue: Int = 0
let maxValue: Int = 2
let range: ClosedRange<Int> = minValue...maxValue
print((-1).clamp(minValue: minValue, maxValue: maxValue)) // 0
print(0.clamp(minValue: minValue, maxValue: maxValue)) // 0
print(1.clamp(minValue: minValue, maxValue: maxValue)) // 1
print(2.clamp(minValue: minValue, maxValue: maxValue)) // 2
print(3.clamp(minValue: minValue, maxValue: maxValue)) // 2
print((-1).clamp(to: range)) // 0
print(0.clamp(to: range)) // 0
print(1.clamp(to: range)) // 1
print(2.clamp(to: range)) // 2
print(3.clamp(to: range)) // 2
以上になります。
Discussion