Search code examples
swiftfor-in-loop

Three variables in for...in loop using Swift


I was able to implement a for ... in loop in Swift for two variables using the zip() function:

for (i, j) in zip(1...number, 2...number + 1)

Now, I am trying to implement a for ... in loop in Swift for three variables using zip(), but it is giving errors:

for (i, j, k) in zip(1...number, 2...number + 1, 3...number + 2)

The error I am getting when using zip:

main.swift:8:51: error: extra argument in call for (i, j, k) in zip(1...number, 2...number + 1, 3...number + 2)

I also tried omitting the zip() function, but I am still getting errors:

for (i, j, k) in (1...number, 2...number + 1, 3...number + 2)

The error I am getting without using zip():

main.swift:8:18: error: type '(ClosedRange, ClosedRange, ClosedRange)' does not conform to protocol 'Sequence' for (i, j, k) in (1...number, 2...number + 1, 3...number + 2)

How can I fix this?


Solution

  • zip(_:_:) doesn't work with more than 2 arguments.

    func zip(_ sequence1: Sequence1, _ sequence2: Sequence2) -> Zip2Sequence where Sequence1 : Sequence, Sequence2 : Sequence

    You need to combine multiple zip(_:_:) to get that working.

    Example:

    for ((i, j), k) in zip(zip(1...number, 2...number + 1), 3...number + 2) {
        print(i, j, k)
    }