如何编写在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