【发布时间】:2016-07-15 02:23:14
【问题描述】:
看起来下面的 Swift for-in 循环试图遍历比数组中更多的元素。
例如,这段代码:
var list:[Int?] = [1,2,3,4,5,6,7]
print("C-Style for loop")
for var i=0; i<list.count; i++
{
var x:Int = list[i]!
print(x)
}
print("\nFor-in loop")
for var x:Int! in list
{
print(x)
}
得到这个输出:
C-Style for loop
1
2
3
4
5
6
7
For each loop
1
2
3
4
5
6
7
fatal error: unexpectedly found nil while unwrapping an Optional value
...
Illegal instruction: 4
我一定在这里遗漏了什么。 list.count 不应该是 for-in 循环尝试解包的元素数吗?
如上图所示,如果使用 [Int] 列表而不是 [Int?] 且没有展开,for-in 循环将按预期工作。
我使用的是 Swift 2.1.1 版。
【问题讨论】:
-
这里有一些奇怪的行为。如果将
list标记为[Int],然后将x标记为Int?,则for-in循环将永远打印nil。 -
@Robert 如果您了解它的工作原理,这种行为并不是特别奇怪......但 Swift 可能应该简单地阻止
x被标记为这样的可选标签(因为它只能导致无限循环)。 -
你能简单解释一下发生了什么吗?为什么会造成无限循环?
-
@Robert 我对你刚才提出的问题的回答并没有完全涵盖那个解释,但我愿意回答你的问题......但在 cmets 中这样做会有点困难。也许通过here 的解释,你有足够的信息来弄清楚。
标签: swift for-loop for-in-loop