Swift Array.filter方法

时间:2014-09-09 02:41:19

标签: arrays filter swift

Swift的过滤方法定义如下:

func filter(includeElement: (T) -> Bool) -> [T]

为什么Swift数组中的过滤器定义在其定义中没有<T>(即过滤器(...))?

2 个答案:

答案 0 :(得分:2)

filterArray<T>类的方法,因此在类级别指定T,并且不需要在方法中复制它 - 实际上在方法级别执行此操作是一个错误:

struct Array<T> ... {
    func filter<V>(includeElement: (V) -> Bool) -> [V]
}

因为V是与T无关的不同类型(除非您在通用定义中设置了约束)。我的意思是TV是不同的类型,而可以认为它们是相同的。使用泛型方法的泛型类是完全合法的。

答案 1 :(得分:0)

这是因为此函数在Array结构的扩展中定义,并且Array的定义在其定义中具有:struct Array

class AA<T> {
}

extension AA {
    func something(aThing: T) -> T{
        return aThing
    }
}