如何编写在Swift中使用Comparable的全局函数

如何编写在Swift中使用Comparable的全局函数,swift,generics,Swift,Generics,我有一个“钳制”辅助函数,如: 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,

我有一个“钳制”辅助函数,如:

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是一个泛型协议,如果没有泛型类型,它就不是一个完整的类型,因此不能用作参数

有办法解决这个问题吗?谢谢

试试这个:

public func CLAMP<T>(_ val: T, _ low: T, _ high: T) -> T where T: Comparable {
  return min(max(val, low), high)
}
public-func-CLAMP(val:T,u-low:T,uu-high:T)->T其中T:compariable{
返回最小值(最大值(val、低)、高)
}
您是对的,您不能使用Comparable作为参数,因为如果没有定义其关联类型,它就不是“完整的”。因此,您必须使函数本身具有通用性(而不是协议)

没有“通用协议”@LeoDabus