我已經創建了我的自定義序列類型,並且我希望函數接受任何種類的序列作爲參數。 (我想用就可以了兩套,我的序列類型)Swift:作爲函數參數的任何類型的序列
事情是這樣的:
private func _addToCurrentTileset(tilesToAdd tiles: SequenceType)
有什麼辦法我該怎麼辦呢?
它似乎相對簡單,但我不知道怎麼弄出來。 Swift工具鏈告訴我: Protocol 'SequenceType' can only be used as a generic constraint because it has Self or associated type requirements
,我不知道如何創建一個符合SequenceType和自身要求的協議。
我可以消除與associatedType要求,但不能自我:
protocol EnumerableTileSequence: SequenceType {
associatedtype GeneratorType = geoBingAnCore.Generator
associatedtype SubSequence: SequenceType = EnumerableTileSequence
}
現在如果說我能消除自我要求,則已經有這樣的協議定義其他collectionType實體,如數組,集合將不符合它。
參考: 我自定義序列枚舉類型的所有子類中定義爲:
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