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