当我们编写以下内容时:

for i in 1...10 {
//do stuff
}

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

最佳答案

如果在定义let range = 1..<10之后放置一个断点,您将看到它实际上不是Range结构,而是对CountableRange(或0 ... 10的CountableClosedRange)进行评分。

文件:CountableRangeCountableClosedRange

功能:

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

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

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

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

通用函数:

由于两个结构都符合RandomAccessCollection协议,因此您只能实现一个这样的功能:
func printRange<R>(range: R) where R: RandomAccessCollection {
    for i in range { print ("\(i)") }
}

关于Swift 3中的范围的This article也可能有用。

关于ios - for循环的范围是哪种类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40123570/

10-10 14:35