我正试图通过99 Swift Problems并且我很早就陷入问题4.我有一个链表,我试图找到它的长度。
我计划迭代列表中的元素来计算它们。但我不能使用for / in循环迭代而不使其符合Sequence和IteratorProtocol。我陷入了必需的next()函数。我不确定如何在这种情况下实现下一个功能,我希望有一些方向。
以下是我的链接列表:
public class List<T>: Sequence, IteratorProtocol {
public typealias Element = T
var value: T!
var nextItem: List<T>?
public convenience init!(_ values: T...) {
self.init(Array(values))
}
init!(_ values: Array<T>) {
var values2 = values
if values2.count == 0 {
return nil
}
value = values2.removeFirst()
nextItem = List(values2)
}
}
&#13;
答案 0 :(得分:0)
您不想实施IteratorProtocol
或next
。您只想实施Sequence
以使用for/in
。为此类型实施Sequence
的最佳方法是实施makeIterator
:
extension List: Sequence {
public func makeIterator() -> AnyIterator<T> {
var current: List<T>? = self
return AnyIterator {
let result = current?.value
current = current?.nextItem
return result
}
}
}
let list = List(1,2,3)!
for x in list { print(x) } // 1 2 3