1
我想知道为什么map()
和filter()
在SequenceType
同时返回Array
。其实我并不认为这是必要的。再次返回序列让我感觉更加明智。在Swift中扩展序列类型
但是,我试图添加顺序版本时卡住了。这是我尝试地图:
extension SequenceType {
func seqMap<T, S: SequenceType where S.Generator.Element == T>(
transform: Self.Generator.Element -> T) -> S
{
var sourceGen = generate()
let tGen: AnyGenerator<T> = anyGenerator {
if let el = sourceGen.next() {
return transform(el)
} else {
return nil
}
}
return AnySequence { tGen }
}
}
的XCode告诉我,在最后的return语句以下错误:
cannot invoke initializer for type 'AnySequence<T>' with an argument list of type '(() -> AnyGenerator<T>)'
note: overloads for 'AnySequence<T>' exist with these partially matching parameter lists: (S), (() -> G)
其实,我tGen
是() -> G
型的,所以为什么不会的XCode认为这是模糊的?
非常感谢您的详细解释。我收到的错误信息有些误导。我不知道这个懒惰的属性。现在,这是有道理的。 – obecker