There’s very little up-to-date guidance on how to make generators in Swift (or iterators as they’re apparently called in Swift), especially if you are new to the language. Why are there so many generator types like AnyIterator
and UnfoldSequence
? Why doesn’t the following code, which should yield from a sequence of either individual Int
s or Arrays of Int
s, work?
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)
}
The way I understand it, AnyIterator
is supposed to take the closure in the {}
s and turn it into the .next()
method in the returned generator, but it doesn’t seem to be working. Or should I be using UnfoldSequence
like in this question instead. I’m very confused.