Ho creato il mio tipo di sequenza personalizzato e voglio che la funzione accetti qualsiasi tipo di sequenza come parametro. (Voglio usare entrambi i set, i miei tipi di sequenze su di esso)Swift: Qualsiasi tipo di sequenza come parametro di funzione
Qualcosa di simile a questo:
private func _addToCurrentTileset(tilesToAdd tiles: SequenceType)
C'è un modo come posso farlo?
Sembra relativamente semplice, ma non riesco a capirlo in qualche modo. La toolchain rapida mi dice: Protocol 'SequenceType' can only be used as a generic constraint because it has Self or associated type requirements
, e non so come creare un protocollo che si conformerà a SequenceType e il requisito di Sé da esso.
posso eliminare il requisito associatedType con, ma non Auto:
protocol EnumerableTileSequence: SequenceType {
associatedtype GeneratorType = geoBingAnCore.Generator
associatedtype SubSequence: SequenceType = EnumerableTileSequence
}
Ora, se dico posso eliminare il requisito di sé, quindi già con tale definizione del protocollo di altri enti collectionType come gli array, insiemi non saranno conformi alle esso.
Riferimento: mie sequenze personalizzate vengono tutte le sottoclassi di tipo enumeratore definite come:
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()
}
}
grazie mille, mi interessa davvero il tipo di elementi all'interno della sequenza, c'è un modo per limitare un tipo di elementi all'interno? qualcosa come: –
ambientlight
@ambientlight Sure, si può fare '' se 'TileID' è un protocollo o' == TileID' se è un tipo concreto –
Hamish