数值协议的通用扩展

nat*_*ft1 2 ios swift

我正在尝试使用一种方法将Swift类型的数值协议进行扩展,该方法将一个Numeric类型除以另一个相同类型的类型,如下所示:

extension Numeric {
  func percentage<T>(of: T) -> T where T.Type == Self.Type {
    return self / of
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误

相同类型的要求使通用参数“ T”和“ Self”等效

当它不是协议扩展时,它可以工作,但是我很想知道是否有可能将其作为扩展,以及该错误的含义。

这有效:

func percentage<T: Numeric>(n1: T, n2: T) -> T {
  return n1 / n2
}
let d = x(n1: 2.0, n2: 3.0)
Run Code Online (Sandbox Code Playgroud)

Ale*_*ica 5

不需要T

extension Numeric {
    func percentage<Self>(of whole: Self) -> Self {
        return self / whole
    }
}
Run Code Online (Sandbox Code Playgroud)