Swift 3 通用类型函数将数值限制在 0 和 1 区间

标签 swift generics swift3

我想编写一个函数,将数值限制在封闭的 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/

相关文章:

ios - 左下角重叠单元格

java - 具有泛型类型的方法调用链(好奇地重复泛型模式)

swift - 为什么 'nil' 与 Swift 3 中的 'UnsafePointer<CGAffineTransform>' 不兼容?

scenekit - Swift 3.0 如何使用 startDeviceMotionUpdates(to : withHandler)?

ios - 在加载数据之前完成所有异步请求?

ios - 从按钮访问 View Controller

java - 以原子方式确保 ConcurrentMap 条目

java - 如何判断类的类型并通过fromJson方法括号传递给gson

iOS 功能和按钮

ios - 在文本字段中显示文本有一个奇怪的行为