Utworzony został mój niestandardowy typ sekwencji i chcę, aby funkcja akceptowała dowolny typ sekwencji jako parametr. (Chcę użyć obu zestawów, a moje typy sekwencji na nim)Swift: Dowolny rodzaj sekwencji jako parametr funkcji
coś takiego:
private func _addToCurrentTileset(tilesToAdd tiles: SequenceType)
Czy istnieje jakiś sposób, w jaki sposób mogę to zrobić?
Wydaje się stosunkowo proste, ale nie mogę tego jakoś rozgryźć. Swift Toolchain mówi: Protocol 'SequenceType' can only be used as a generic constraint because it has Self or associated type requirements
, i nie wiem, jak utworzyć protokół, który będzie zgodny z SequenceType i wymogiem Self z niego.
mogę wyeliminować wymóg associatedType z, ale nie siebie:
protocol EnumerableTileSequence: SequenceType {
associatedtype GeneratorType = geoBingAnCore.Generator
associatedtype SubSequence: SequenceType = EnumerableTileSequence
}
Teraz mogę powiedzieć, czy wyeliminowanie wymogu samodzielne, potem już z takiej definicji protokół innymi podmiotami collectionType takich tablic, zestawy nie będą zgodne z to.
referencyjny: moje niestandardowe sekwencje są wszystkie podklasy rodzaju enumeratora zdefiniowany jako:
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()
}
}
wielkie dzięki, naprawdę zależy mi na typie elementów wewnątrz sekwencji, czy jest jakiś sposób na ograniczenie rodzaju elementów wewnątrz? coś takiego: –
ambientlight
@ambientlight Oczywiście, możesz zrobić '' jeśli 'TileID' jest protokołem lub' == TileID' jeśli jest to konkretny typ –
Hamish