当我在Playground中使用for循环时,一切都很好,直到我将for循环的第一个参数更改为最大值。(按降序迭代)

这是一个bug吗?还有其他人有吗?

for index in 510..509
{
    var a = 10
}

显示将要执行的迭代次数的计数器一直在滴答作响……


当前回答

var sum1 = 0
for i in 0...100{
    sum1 += i
}
print (sum1)

for i in (10...100).reverse(){
    sum1 /= i
}
print(sum1)

其他回答

Swift向前

for i in stride(from: 5, to: 0, by: -1) {
    print(i)
}
//prints 5, 4, 3, 2, 1

for i in stride(from: 5, through: 0, by: -1) {
    print(i)
}
//prints 5, 4, 3, 2, 1, 0

在Swift 4及后续版本中

    let count = 50//For example
    for i in (1...count).reversed() {
        print(i)
    }

您可以使用reversed()方法轻松反转值。

var i:Int
for i in 1..10.reversed() {
    print(i)
}

reversed()方法反转值。

对于Swift 2.0及以上版本,你应该在range collection上应用reverse

for i in (0 ..< 10).reverse() {
  // process
}

在Swift 3.0中已被重命名为.reversed()

Xcode 6 beta 4增加了两个函数来迭代除一个步骤以外的范围: Stride (from: to: by:)用于独占范围,Stride (from: through: by:)用于包含范围。

要以相反的顺序迭代一个范围,它们可以如下所示:

for index in stride(from: 5, to: 1, by: -1) {
    print(index)
}
//prints 5, 4, 3, 2

for index in stride(from: 5, through: 1, by: -1) {
    print(index)
}
//prints 5, 4, 3, 2, 1

注意,这两个都不是Range成员函数。它们是返回StrideTo或StrideThrough结构体的全局函数,它们与Range结构体的定义不同。

这个答案的前一个版本使用了Range结构体的by()成员函数,该函数在beta 4中被删除。如果您想了解它是如何工作的,请检查编辑历史记录。