gpt4 book ai didi

swift - IteratorProtocol 需要 next() 函数来实现通用链表

转载 作者:行者123 更新时间:2023-11-30 11:53:31 26 4
gpt4 key购买 nike

我正在尝试访问99 Swift Problems我很早就陷入了问题 4 的困境。我有一个链表,我试图找到它的长度。

我计划迭代列表中的元素来对它们进行计数。但如果不符合 Sequence 和 IteratorProtocol,我就无法使用 for/in 循环进行迭代。我陷入了所需的 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)
}
}

最佳答案

您不想实现IteratorProtocolnext。您只想实现 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

关于swift - IteratorProtocol 需要 next() 函数来实现通用链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com