Comparable#clamp
という便利メソッドを知った。
いままではこう書いていた
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
と書けて便利。
もうちょっと良い書き方とかあったら教えてもらえると喜びます。