2017-06-18 5 views
1

私はプロトコルPointsを持ち、Pointインスタンスの順序付きシーケンスを返すメソッドを持っています。Swiftでのシーケンスの返信3

配列を返すことができますが、Pointsの実装で配列にデータをコピーする必要がないように、より汎用的なものを返すことはできますか?エラー

protocol Points { 
    var points: Sequence {get} 
} 

しかし取得:

は、私はこれを実行しようとしました、私はおよそ SequenceOfを読んで、古い質問に

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

を、これはスウィフト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

ええと、私はちょうどdupeとして閉めるかもしれないと思います。しかし自己回答を加えることが有益になると思うなら、それに行きましょう:) – Hamish

答えて

1

Hamish mentionsこの場合、AnySequenceを使用してください。プロトコル定義は次のようになります。

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

これの実装は次のようになります。

var points: AnySequence<Point> { 
    return AnySequence(children.map{$0.points}.joined()) 
} 
関連する問題