当我们写下以下内容时:
for i in 1...10 {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我想知道1...10在函数调用中使用它的范围是什么类型,例如:
myFunc(1...10)
Run Code Online (Sandbox Code Playgroud)
如果你在定义之后放置一个断点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)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |