C-Style i ++ for在swift问题中已被弃用

时间:2016-04-19 03:22:49

标签: swift

我想在某个时刻增加索引,这个循环打印1,3,5这是我想要的。我收到了警告

不推荐使用C-Style for语句并且......

我知道这意味着什么。

for var index=0; index<5; index++ {
    //If condition A == true
    index++
    //else without index++
    print(index) // print 1, 3, 5
}

所以我改成了:

for var index in 0..<5 {
    //If condition A == true
    index += 1
    //else without index++
    print(index) // print 1,2,3,4,5 Should 1,3,5 from my side
}

我只是想知道为什么索引不可变?即使我已将其设置为var或我的问题的任何解决方案。

4 个答案:

答案 0 :(得分:3)

索引不可变,因为

for var x in y { 
    ...
}

相当于

for temp in y { 
    var x = temp
    ...
}

其中var仅使x成为temp的副本。当您修改x时,它不会修改真实索引temp(这也是导致SE-0003的原因)

C风格的for循环可以简化为while循环:

var index = 0
while index < 5 {
    if conditionA {
        index += 1
    }
    print(index)
    index += 1
}

答案 1 :(得分:1)

如果您只需要枚举奇数,最简单的方法是使用stride

for i in 1.stride(through: 5, by: 2) {
    print(i) // prints 1, 3, 5
}

答案 2 :(得分:0)

我认为使用for in循环时swift循环变量是不可变的。在循环中变换一个循环变量通常(人们可能总是争辩)一个坏主意,所以快速的设计师不允许它是有道理的。可以以更干净的方式完成所需的结果,例如使用continue

for i in 1...5
{
    if i%2==0
    {
        continue
    }
    print(i) 
} 

答案 3 :(得分:0)

以下是获得所需结果的一种方法:

for var index in 0..<3 {
    print(2 * index + 1)
}