我已经创建了我的自定义序列类型,并且我希望函数接受任何种类的序列作为参数。 (我想用就可以了两套,我的序列类型)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