我正在尝试使用一种将Swift类型的Numeric
除以另一个相同类型的方法来扩展Swift的Numeric协议:
extension Numeric {
func percentage<T>(of: T) -> T where T.Type == Self.Type {
return self / of
}
}
但是我得到了错误
相同类型的要求使通用参数'T'和'Self'等效
当它不是协议扩展时,它可以工作,但是我很想知道是否有可能将其作为扩展,以及该错误的含义。
这有效:
func percentage<T: Numeric>(n1: T, n2: T) -> T {
return n1 / n2
}
let d = x(n1: 2.0, n2: 3.0)
答案 0 :(得分:4)
不需要T
。
extension Numeric {
func percentage<Self>(of whole: Self) -> Self {
return self / whole
}
}
答案 1 :(得分:2)
实际上,@ Alexander的答案对我不起作用,因为Numeric
协议类型不支持除法。当将Numeric
百分比值应用于整数除法时,其用途也很有限。
您可以通过将其限制为FloatingPoint
协议来克服这些问题。另外请记住,这本身并不是一个百分比函数-乘以100即可得到,即:
extension FloatingPoint
{
func percentage(of whole: Self) -> Self
{
return (self / whole) * 100
}
}