【发布时间】:2017-04-01 20:08:12
【问题描述】:
关于如何在 Swift 中创建生成器(或 iterators,因为它们在 Swift 中显然被称为)几乎没有最新的指导,特别是如果您是该语言的新手。为什么会有这么多像AnyIterator 和UnfoldSequence 这样的生成器类型?为什么以下代码(应该从单个 Ints 序列或 Ints 数组中产生)不起作用?
func chain(_ segments: Any...) -> AnyIterator<Int>{
return AnyIterator<Int> {
for segment in segments {
switch segment {
case let segment as Int:
return segment
case let segment as [Int]:
for i in segment {
return i
}
default:
return nil
}
}
return nil
}
}
let G = chain(array1, 42, array2)
while let g = G.next() {
print(g)
}
按照我的理解,AnyIterator 应该是把{}s 中的闭包转换成返回的生成器中的.next() 方法,但它似乎不起作用。或者我应该像this question 那样使用UnfoldSequence。我很困惑。
【问题讨论】: