Swift 3-遍历泛型集合

时间:2018-08-28 05:05:47

标签: swift3 iterator sequence

我有一个基于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()
    }
}

0 个答案:

没有答案