微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – For-in循环过于远,在展开时发现’nil’

看起来下面的 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上.

解决方法

基本上你已经完成了一些你不应该做的事情,因此你偶然发现了一些可能是编译器错误的东西(因为编译器没有阻止你).非常好!

现在的解决方案.您显然正在尝试用Int!打开包装!要安全解包,请使用case语法:

let list:[Int?] = [1,7]
for case let x? in list
{
    print(x) // 1,7
}

另一种方式(相同的结果):

let list:[Int?] = [1,7]
list.flatMap{$0}.forEach{print($0)} // 1,7

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐