2017-06-18 71 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()) 
}