为了更好地理解 Swift,我扩展SequenceType了添加我自己版本的map,reduce和forEach函数。但是,该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?
不知道为什么,但 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] = [])。