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
A very clean alternative to your if-else
statements, keeping the readability would be:
extension Comparable{
func clamp(_ min: Self,_ max: Self) -> Self{
return min...max~=self ? self : (max < self ? max : min)
}
}
I think this is a good alternative to using a range as parameter, because, in my opinion, it is annoying to write 6.clamp((4...5))
each time insted of 6.clamp(4,5)
.
When it comes to your struct
, I think you should not use this clamp
extension at all, because, say, 100 does not mean 4... I cannot see the reason for doing this, but it's up to you.