【问题标题】:How to write a global function that uses Comparable in Swift如何在 Swift 中编写一个使用 Comparable 的全局函数
【发布时间】:2021-05-08 00:08:21
【问题描述】:

我有一个“固定”的辅助函数,例如:

public extension Comparable {
  func clamped(_ low: Self, _ high: Self) -> Self {
    return min(max(self, low), high)
  }
}

我觉得这写起来不方便(与 Swift 内置的 min/max 全局函数相比),并且想使用方法。我试过了

// global function
public func CLAMP(_ val: Comparable, _ low: Comparable, _ high: Comparable) -> Comparable {
  return min(max(val, low), high)
}

我理解这是因为 Comparable 是一个泛型协议,没有泛型就不是完整的类型,因此不能用作参数。

有没有办法解决这个问题?谢谢!

【问题讨论】:

标签: swift generics


【解决方案1】:

试试这个:

public func CLAMP<T>(_ val: T, _ low: T, _ high: T) -> T where T: Comparable {
  return min(max(val, low), high)
}

您是对的,您不能使用 Comparable 作为参数,因为如果没有定义其关联类型,它就不是“完整的”。所以你必须使函数本身通用(而不是协议)

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多