次のSwift for-inループが配列内の要素よりも多くの要素を通過しようとしているようです。例えばFor-inループがone-far-farになり、アンラッピング中に 'nil'が見つからない
、このコード:
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
私はここで何かが欠けている必要があります。
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)
}
は、この出力を取得します。 list.count
は、for-inループがアンラップしようとする要素の数であるべきではありませんか?
上記の図ではありませんが、[Int?]
の代わりに[Int]
リストを使用すると、for-inループが正常に機能します。
私はSwiftバージョン2.1.1を使用しています。
ここではいくつかの奇妙な行動を安全のラップを解除するには、
for case
構文を使用します。 'list'を' [Int] 'とし、' x'を 'Int'とすると' for-in'ループは 'nil'を永遠に表示します。 – BallpointBen@Robertそれはどのように動作するかを理解すれば、その動作は特に奇妙なものではありませんが、Swiftはおそらく単純にそのようなオプションである 'x'を(おそらく無限ループになる可能性があるため) – nhgrif
何が起こっているのか簡単に説明できますか?なぜこれが無限ループになるのですか? – BallpointBen