为了更好地了解Swift,我已经扩展2
5
以添加我自己的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
}
}
产生"无效使用()来调用非函数类型的值[Self.Generator.Element.Type]"错误。我的问题是如何创建/添加/返回var array = [Self.Generator.Element]()
数组?
答案 0 :(得分:4)
不确定原因,但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
}
}
唯一的变化是数组声明(var array : [Self.Generator.Element] = []
)。
答案 1 :(得分:4)
var array = [Self.Generator.Element]()
您可能意味着(并且确实意味着)您要为类型Array<Self.Generator.Element>
调用构造函数。
但是你可能意味着(并且编译器认为你的意思)你想创建一个Self.Generator.Element.Type
的数组,然后你想把它称为函数。
我不记得这在过去是一个编译器混乱,它可能是一个回归。也就是说,这是模棱两可的(虽然最后只有一个真的有意义,我认为你需要在那里说Generator.Element.self
来引用这个类型,所以也许这是真的编译器错误)。您可以使用首选方法初始化数组,通过使用类型:
var array: [Self.Generator.Element] = []