_和..在for循环中意味着什么?

时间:2015-10-26 23:54:22

标签: swift

我正在做A Swift Tour

一:

我没有获得Generics函数逻辑。它用于Design Patterns?这次巡演的解释看起来很短,不清楚。

两个

在这个用于创建泛型函数的代码中,

func repeatItem<Item>(item: Item, numberOfTimes: Int) -> [Item] {
    var result = [Item]()
    for _ in 0..<numberOfTimes { //im not getting this line (?)
        result.append(item)
    }
    return result
}
repeatItem("knock", numberOfTimes:4)

我不太了解这种语法,在同一行中_..<是什么意思,为什么会这样使用?

4 个答案:

答案 0 :(得分:3)

_..<不属于泛型。

_只是一个从未使用的参数的非名称。 通常你会在这里放一个像i这样的变量名,并在块中使用它,但是你只是做了一些事情,你实际上没有使用索引。

..<是起始值和结束值之间范围的简写。然后,1..<5会生成范围1,2,3,4

还有一个范围简写...,可以为您提供最后一个值5

  

通用代码使您可以编写灵活,可重用的函数和   可以使用任何类型的类型,符合您的要求   限定。您可以编写避免重复的代码并表达它   意图以清晰,抽象的方式。   Generics

答案 1 :(得分:2)

如果不在其他地方使用变量,可以使用下划线。因此,如果您循环使用某些数字范围,并且未使用索引,则可以使用_。这只是语法糖。

0..<4表示从0开始计数,并计数到4-1 = 3 。您可以使用0...4包含最后一个数字,这意味着*从0开始计数,最多计数到4`。

for i in 0..<4 {
    print(i)
} // prints 0, 1, 2, 3

虽然

for i in 0...4 {
    print(i)
} // prints 0, 1, 2, 3, 4 

答案 2 :(得分:1)

考虑C:

中的旧学校for循环
for var i = 0; i < numberOfTimes; i++ {
    result.append(item)
}

哎呀,很多代码只是为result.append(item)重复numberOfTimes! Swift有一个简写语法:a..<b表示“从a迭代到小于b”,因此您的for循环可以重写为:

for i in 0..<numberOfTimes {
    result.append(item)
}

但是你不要在循环体内使用i。你想要的只是重复它numberOfTimes。所以你不关心迭代器采用什么名称:ixz。因此,您甚至不需要声明它,只需将其替换为_

for _ in 0..<numberOfTimes {
    result.append(item)
}

答案 3 :(得分:0)

for _ in 0..<numberOfTimes {
    (something)
}

相当于:

for(var nameForWhichIdontCare = 0; nameForWhichIDontCare < numberOfTimes {
    (something)
}

所以:

  

_用于需要名称但你不在乎的地方,所以基本上从头开始丢弃名称。

     

..<是一个范围,最多可达数字。

     

...是一个范围,包括一个数字。