Swift的过滤方法定义如下:
func filter(includeElement: (T) -> Bool) -> [T]
为什么Swift数组中的过滤器定义在其定义中没有<T>
(即过滤器(...))?
答案 0 :(得分:2)
filter
是Array<T>
类的方法,因此在类级别指定T
,并且不需要在方法中复制它 - 实际上在方法级别执行此操作是一个错误:
struct Array<T> ... {
func filter<V>(includeElement: (V) -> Bool) -> [V]
}
因为V
是与T
无关的不同类型(除非您在通用定义中设置了约束)。我的意思是T
和V
是不同的类型,而可以认为它们是相同的。使用泛型方法的泛型类是完全合法的。
答案 1 :(得分:0)
这是因为此函数在Array结构的扩展中定义,并且Array的定义在其定义中具有:struct Array
class AA<T> {
}
extension AA {
func something(aThing: T) -> T{
return aThing
}
}