What kind of type have the range in for loop?

ios, range, swift

Solution

If you put a breakpoint after defining `let range = 1..<10`, you will see that it's actually not a `Range` structure, but rater a `CountableRange` (or `CountableClosedRange` for 0...10)

Docs: CountableRange, CountableClosedRange

Functions:

func printRange(range: CountableRange<Int>) {
    for i in range { print ("\(i)") }
}

func printRange(range: CountableClosedRange<Int>) {
    for i in range { print ("\(i)") }
}

Usage:

let range = 1..<10
printRange(range: range)

let closedRange = 1...10
printRange(range: closedRange)

Generic function:

Since both structs conform to `RandomAccessCollection` protocol, you can implement only one function like this:

func printRange<R>(range: R) where R: RandomAccessCollection {
    for i in range { print ("\(i)") }
}

This article about ranges in Swift 3 may also be useful.

Problem

When we write the following: ``` for i in 1...10 { //do stuff } ``` I want know what type have the range `1...10` to use it in function call for example: ``` myFunc(1...10) ```

Original source