Dường như vòng lặp Swift for-in sau đang cố gắng đi qua nhiều phần tử hơn là trong mảng.Vòng lặp for-in đi quá xa và tìm 'nil' trong khi unwrapping
Ví dụ, mã này:
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)
}
Gets sản lượng này:
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
tôi phải mất một cái gì đó ở đây. Không nên list.count
là số yếu tố mà vòng lặp for-in cố gắng tháo gỡ?
Không được minh họa ở trên, vòng lặp for-in hoạt động như mong đợi nếu sử dụng danh sách [Int]
thay vì [Int?]
mà không cần mở khóa.
Tôi đang sử dụng phiên bản Swift 2.1.1.
Một số hành vi kỳ lạ ở đây. Nếu bạn gắn nhãn 'list' là' [Int] 'và sau đó gắn nhãn' x' thành 'Int?', Vòng lặp 'for-in' sẽ in' nil' mãi mãi. – BallpointBen
@Robert Hành vi đó không có gì đặc biệt lạ nếu bạn hiểu cách nó hoạt động ... nhưng Swift có lẽ chỉ đơn giản là ngăn chặn 'x' là nhãn như một tùy chọn như vậy (vì nó chỉ có thể dẫn đến một vòng lặp vô hạn). – nhgrif
Bạn có thể giải thích ngắn gọn những gì đang diễn ra không? Tại sao điều này tạo ra một vòng lặp vô hạn? – BallpointBen