vgm*_*ose 5 for-loop for-in-loop swift
看起来下面的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)
}
Run Code Online (Sandbox Code Playgroud)
获取此输出:
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
Run Code Online (Sandbox Code Playgroud)
我必须在这里遗漏一些东西.不应该list.count
是for-in循环尝试解包的元素数量?
如上图所示,如果使用[Int]
列表而不是不解包,则for-in循环按预期工作[Int?]
.
我在Swift版本2.1.1上.
基本上你做了一些你不应该做的事情,因此你偶然发现了一些可能是编译器错误的东西(因为编译器没有阻止你)。很不错!
现在解决方案。您显然正在尝试用您的Int!
. 要安全地解包,请使用for case
语法:
let list:[Int?] = [1,2,3,4,5,6,7]
for case let x? in list
{
print(x) // 1, 2, 3, 4, 5, 6, 7
}
Run Code Online (Sandbox Code Playgroud)
另一种方式(相同的结果):
let list:[Int?] = [1,2,3,4,5,6,7]
list.flatMap{$0}.forEach{print($0)} // 1, 2, 3, 4, 5, 6, 7
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
156 次 |
最近记录: |