我想在某个时刻增加索引,这个循环打印1,3,5这是我想要的。我收到了警告
我知道这意味着什么。
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
或我的问题的任何解决方案。
答案 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)
}