我正在寻找一种更优雅的方式为数字创建有限的限制器,主要是用于制作者.有很多技术可以确定值是否在边界内,但是我没有看到强制传入值符合这些边界的任何本机函数.
接受答案在这里很接近,但我想封顶值,而不是仅仅强制执行.
这是我到目前为止所拥有的.我不确定Int扩展.if-else如果可能的话,我宁愿将其折叠成一个优雅的代码行.理想情况下,我也希望缩短其中的实际实现struct.
extension Int {
func bounded(_ min: Int, _ max: Int) -> Int {
if self < min {
return min
} else if self > max {
return max
} else {
return self
}
}
}
print(5.bounded(4, 6)) // 5
print(5.bounded(1, 3)) // 3
print(5.bounded(6, 9)) // 6
// Used in a sentence
struct Animal {
var _legs: Int = 4
var legs: Int {
get {
return _legs
}
set {
_legs = newValue.bounded(1, 4)
}
}
}
var dog = Animal()
print(dog.legs) // 4
dog.legs = 3
print(dog.legs) // 3
dog.legs = 5
print(dog.legs) // 4
dog.legs = 0
print(dog.legs) // 1
Run Code Online (Sandbox Code Playgroud)
这是Apple自己的方法,取自以下示例代码:
func clamp<T: Comparable>(value: T, minimum: T, maximum: T) -> T {
return min(max(value, minimum), maximum)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |