2017-06-18 59 views
1

我有一個協議Points,該方法應該返回一個有序的Point實例序列。在Swift中返回一個序列3

我會返回一個數組,但我可以返回更多的東西通用的,這樣的Points實現不需要在將數據複製到一個數組中?

我試着這樣做:

protocol Points { 
    var points: Sequence {get} 
} 

但得到的錯誤:

Protocol 'Sequence' can only be used as a generic constraint because it has Self or associated type requirements

在我讀到SequenceOf舊的問題,但是這似乎並沒有在斯威夫特3.

存在

下面是Points協議的示例實現:

extension PointSetNode: Points { 
    var points: ?????? { 
    return children.map{$0.points}.joined() 
    } 
} 

...這裏,children是一個數組。

+1

比較https://stackoverflow.com/q/33843038/2976878 - 你想'AnySequence',這是相當於Swift 1的'SequenceOf'。 – Hamish

+0

可愛,是的,就是這樣。你想做出答案嗎?否則,我很樂意自我回答。 – Benjohn

+0

嗯,我會說不如剛剛接近愚蠢 - 但如果你覺得添加自我回答將是有益的,去吧:) :) – Hamish

回答

1

由於Hamish mentions你應該使用AnySequence這一點。該協議定義是:

protocol Points { 
    var points: AnySequence<Point> {get} 
} 

這方面的實現可能是:

var points: AnySequence<Point> { 
    return AnySequence(children.map{$0.points}.joined()) 
}