我有一个基于Queue<T>
的结构LinkedList<T>()
,我希望能够遍历队列中的元素并对其进行处理。
进行一些挖掘之后,我认为我必须继承Sequence
并执行以下操作:
extension Sequence {
public func makeIterator() -> CountableRange<T>.Iterator {
return (0..<self).makeIterator()
}
}
在我可以在Queue类中拥有一个函数之后,就像这样:
func iter(q: T) -> T? {
for i in q {
}
}
除了扩展名抛出Use of undeclared type 'T'
,for循环抛出Type 'T' does not conform to protocol 'Sequence'
我对Swift还是相当陌生,我了解我必须做的事,只是我不知道该怎么做,并且发现大多数解释都令人困惑。有人可以指出我正确的方向吗?
import Foundation
public struct Queue<T> : Sequence{
fileprivate var list = LinkedList<T>()
public var queueCount : Int {
return list.getCount()
}
public var isEmpty: Bool {
return list.isEmpty
}
public mutating func enqueue(_ element: T) {
list.append(value: element)
}
public mutating func dequeue() -> T? {
guard !list.isEmpty, let element = list.first else { return nil }
list.remove(node: element)
return element.value
}
public func peek() -> T? {
return list.first?.value
}
func iter(q: T) -> T? {
for i in q {
}
}
}
extension Queue: CustomStringConvertible {
// 2
public var description: String {
// 3
return list.description
}
}
extension Sequence {
public func makeIterator() -> CountableRange<T>.Iterator {
return (0..<self).makeIterator()
}
}