私はカスタムシーケンス型を作成しましたが、この関数は任意の種類のシーケンスをパラメータとして受け入れるようにします。このような(私は両方のセットを使用したい、そしてその上に私のシーケンス型)Swift:任意の種類の関数パラメータとしてのシーケンス
何か:
private func _addToCurrentTileset(tilesToAdd tiles: SequenceType)
私はそれを行うことができますどのようにどのような方法はありますか?
これは比較的単純なようですが、何とかそれを把握することはできません。スウィフトツールチェインは私に言った: Protocol 'SequenceType' can only be used as a generic constraint because it has Self or associated type requirements
、私はそれからSequenceTypeと自己要件に準拠するプロトコルを作成する方法を知らない。
私はセルフでassociatedType要件を排除することはできませんが、私は配列のようなプロトコル定義、他のCollectionTypeはエンティティと、すでに、その後、自己の要求を排除することができると言う場合
protocol EnumerableTileSequence: SequenceType {
associatedtype GeneratorType = geoBingAnCore.Generator
associatedtype SubSequence: SequenceType = EnumerableTileSequence
}
を今、セットはに準拠していますそれ。あなたはそのために、型消しゴムAnySequence
を使用することができます
public class Enumerator<T> {
public func nextObject() -> T? {
RequiresConcreteImplementation()
}
}
extension Enumerator {
public var allObjects: [T] {
return Array(self)
}
}
extension Enumerator: SequenceType {
public func generate() -> Generator<T> {
return Generator(enumerator: self)
}
}
public struct Generator<T>: GeneratorType {
let enumerator: Enumerator<T>
public mutating func next() -> T? {
return enumerator.nextObject()
}
}
ありがとう、私は実際にシーケンス内の要素の種類に気をつけていますが、要素の種類を内部に制約するいくつかの方法がありますか? –
ambientlight
@ambientlight確かに、 '' 'TileID'がプロトコルか' ==具体的なタイプの場合はTileID' –
Hamish