在下面的嵌套循环中:
for i in 0..<2 {
print(i)
for i in 0..<2 {
print(i)
}
}
输出应为:
0 0
1
然而它产生:
0 0
1
1
0
1
我无法在苹果文档中找到任何涉及索引(i)范围的内容。如果官方消息来源提供任何参考或解释,我将不胜感激。
答案 0 :(得分:1)
定义循环for X in ...
时,您需要定义每次迭代期间存在的范围以及该范围中存在的常量。除了do {}
的情况之外,我无法找到范围的明确文档,但文档确实假设在讨论诸如guard
声明之类的事情时,在循环中创建和销毁范围。实际上,这就是单循环中i
的范围。
// Scope that i doesn't exist in.
for i in 1..<2 {
// Scope that i exists in.
}
// Scope that i doesn't exist in.
定义嵌套范围(内部for循环)时,您可以重新定义变量和常量。这是在循环声明中定义i
时发生的情况。在内部循环内部,编译器向外查看定义范围。
在i
的情况下,它在内循环中查找并找到它。对于print
,使用的标识符,它在内部循环,外部循环,任何包含小说,然后是类,然后是模块,然后导入模块,直到它找到Swift.print
。
答案 1 :(得分:0)
循环变量的作用域是循环体。 Swift允许局部变量的阴影,因此嵌套循环得到一个名为&#34; i&#34;的全新变量,并且失去对变量&#34; i&#34;的访问权限。从其外部范围。