我想编写一个函数,将数值限制在封闭的 0,1 区间内:
func clamp01<T:???>(_ value:T) -> T {
return value < 0 ? 0 : value > 1 ? 1 : value
}
在 Swift 3 中,如果我使用 T:Strideable
,我会提示 0 和 1 必须进行类型转换(0 as!T
解决了这个问题,但这是强制的投)。
在 Swift 4 中我可以使用 T:Numeric
但我还没有尝试过——我正在寻找 Swift 3 中的解决方案。
最佳答案
您可以为所有 Comparable
类型定义函数
也是 ExpressibleByIntegerLiteral
,涵盖所有整数
和浮点类型:
func clamp01<T: Comparable & ExpressibleByIntegerLiteral>(_ value: T) -> T {
return value < 0 ? 0 : value > 1 ? 1 : value
}
关于Swift 3 通用类型函数将数值限制在 0 和 1 区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45088528/