With Swift 5, you can use one of the following Playground code examples to solve your problem.
let one = [1, 3, 5] let two = [2, 4, 6] let array = zip(one, two).flatMap({ [$0, $1] }) print(array) // print: [1, 2, 3, 4, 5, 6]
Apple states :
If the two sequences passed to zip(_:_:) are of different lengths, the resulting sequence has the same length as the shorter sequence.
let one = [1, 3, 5] let two = [2, 4, 6] let unfoldSequence = sequence(state: (false, one.makeIterator(), two.makeIterator()), next: { state -> Int? in state.0.toggle() return state.0 ? state.1.next() : state.2.next() }) let array = Array(unfoldSequence) print(array) // print: [1, 2, 3, 4, 5, 6]
# 3. Using AnyIterator init(_:) initializer
let one = [1, 3, 5] let two = [2, 4, 6] var oneIterator = one.makeIterator() var twoIterator = two.makeIterator() var state = false let anyIterator = AnyIterator<Int> { state.toggle() return state ? oneIterator.next() : twoIterator.next() } let array = Array(anyIterator) print(array)
Alternatively, you can wrap your iterators in an AnySequence instance:
let one = [1, 3, 5] let two = [2, 4, 6] let anySequence = AnySequence<Int>({ () -> AnyIterator<Int> in var oneIterator = one.makeIterator() var twoIterator = two.makeIterator() var state = false return AnyIterator<Int> { state.toggle() return state ? oneIterator.next() : twoIterator.next() } }) let array = Array(anySequence) print(array)