我如何在 Swift 中实现过滤器功能

Eps*_*lon 2 arrays swift

为了更好地理解 Swift,我扩展SequenceType了添加我自己版本的map,reduceforEach函数。但是,该filter函数的不同之处在于它返回一个Self.Generator.Element. 这是我到目前为止所拥有的:

extension SequenceType {
    public func myFilter(@noescape includeElement: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.Generator.Element] {
        var array = [Self.Generator.Element]()
        for element in self {
            do {
                if try includeElement (element) {
                    array.append(element)
                }
            }
        }
        return array
    }
}
Run Code Online (Sandbox Code Playgroud)

该语句var array = [Self.Generator.Element]()产生“Invalid use of () to call a value of non-function type [Self.Generator.Element.Type]”错误。我的问题是如何创建/添加到/返回一个数组Self.Generator.Element

Ada*_*dam 5

不知道为什么,但 Xcode 可以使用以下语法:

extension SequenceType {
    public func myFilter(@noescape includeElement: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.Generator.Element] {
        var array : [Self.Generator.Element] = []
        for element in self {
            do {
                if try includeElement (element) {
                    array.append(element)
                }
            }
        }
        return array
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一的变化是数组声明 ( var array : [Self.Generator.Element] = [])。