参数化类型的方法可以省略类型参数

时间:2017-03-25 20:07:48

标签: swift generics

我在https://github.com/github/swift-style-guide/blob/master/README.md

上阅读了以下建议

但这部分我不明白。什么接收类型和接收器是什么? 感谢。

  

尽可能省略类型参数

     

参数化类型的方法可以省略类型参数   当接收器与接收器相同时接收类型。例如:

struct Composite<T> {
  …
  func compose(other: Composite<T>) -> Composite<T> {
      return Composite<T>(self, other)
  }
} 
     

可以呈现为:

struct Composite<T> {
  …
  func compose(other: Composite) -> Composite {
      return Composite(self, other)
  }
}

1 个答案:

答案 0 :(得分:0)

“类型参数”是指通用结构的具体类型。例如,您可以使用A类型的结构Composite<Int>。类型参数是Int。像T这样的类型参数是一个泛型类型参数,可以代表任何类型的具体类型,除非受约束。

样式指南使用的事实是Swift编译器非常擅长推断类型参数,因此您只需编写Composite而不使用类型参数。如果在此示例中,Composite的初始化程序指定两个参数必须属于同一类型,则可以执行此操作。由于Swift知道self属于Composite<T>类型,因此它知道other也必须属于Composite<T>类型,并且因为Composite.init(::)返回了Composite<T>的结构相同类型,则返回类型为void setEnqAllocation(int); 。当然,这一切都取决于初始化程序。

就个人而言,我不同意这一点的风格指南。总是更好地明确,尖括号不会占用那么多空间。