gpt4 book ai didi

swift - Swift 中优雅的 `bounded` 方法

转载 作者:搜寻专家 更新时间:2023-11-01 05:50:02 24 4
gpt4 key购买 nike

我正在寻找一种更优雅的方法来为数字创建有界限制器,主要用于 setter 。有很多技术可以确定一个值是否在边界内,但我没有看到任何 native 函数可以强制传入值符合这些边界。

已接受的答案 here接近,但我想限制这些值,而不是仅仅强制执行它们。

这是我目前所拥有的。我不确定 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

最佳答案

这是苹果自己的做法,取自this sample code :

func clamp<T: Comparable>(value: T, minimum: T, maximum: T) -> T {
return min(max(value, minimum), maximum)
}

关于swift - Swift 中优雅的 `bounded` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com