【发布时间】:2016-09-24 07:53:19
【问题描述】:
我已经创建了我的自定义序列类型,我希望该函数接受任何类型的序列作为参数。 (我想同时使用这两个集合,以及我的序列类型)
类似这样的:
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 和 Self 要求的协议。
我可以用 Self 来消除 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()
}
}
【问题讨论】: