Wygląda na to, że następująca pętla Swift for-in próbuje przejść przez więcej elementów niż w macierzy.Pętla wejścia w jedną stronę idzie zbyt daleko i znajduje "zero" podczas rozpakowywania.
Na przykład, ten kod:
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)
}
Pobiera tego wyjścia:
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
I musi być brakuje czegoś tutaj. Czy nie powinna być liczbą elementów, które pętla for-in próbuje odwijać?
Na powyższym obrazku pętla wejścia działa zgodnie z oczekiwaniami, jeśli zamiast listy jest używana lista [Int]
bez rozpakowywania.
Jestem na wersji Swift 2.1.1.
niektóre dziwne zachowanie tutaj. Jeśli nazwiesz 'list' jako' [Int] ', a następnie oznaczysz' x' jako 'Int?', To 'for-in' wypisze' nil' na zawsze. – BallpointBen
@Robert Takie zachowanie nie jest szczególnie dziwne, jeśli rozumiesz, jak to działa ... ale Swift prawdopodobnie po prostu zapobiegnie temu, aby 'x' oznaczało etykietę jako opcjonalną (ponieważ może tylko spowodować nieskończoną pętlę). – nhgrif
Czy możesz krótko wyjaśnić, co się dzieje? Dlaczego tworzy to nieskończoną pętlę? – BallpointBen