什么类型的循环范围?

And*_* M. 3 range ios swift

当我们写下以下内容时:

for i in 1...10 {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)

我想知道1...10在函数调用中使用它的范围是什么类型,例如:

myFunc(1...10)
Run Code Online (Sandbox Code Playgroud)

ale*_*nik 5

如果你在定义之后放置一个断点let range = 1..<10,你会发现它实际上不是一个Range结构,而是评价a CountableRange(或CountableClosedRange0 ... 10)

文档:CountableRange,CountableClosedRange

功能:

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

func printRange(range: CountableClosedRange<Int>) {
    for i in range { print ("\(i)") }
}
Run Code Online (Sandbox Code Playgroud)

用法:

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

let closedRange = 1...10
printRange(range: closedRange)
Run Code Online (Sandbox Code Playgroud)

通用功能:

由于两个结构都符合RandomAccessCollection协议,因此您只能实现一个这样的函数:

func printRange<R>(range: R) where R: RandomAccessCollection {
    for i in range { print ("\(i)") }
}
Run Code Online (Sandbox Code Playgroud)

这篇关于Swift 3中的范围的文章也可能有用.

  • *挑战:*定义一个接受"1 ... 10"和"1 .. <10"作为参数的函数:) (2认同)