加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:42:32 所属栏目:百科 来源:网络整理
导读:看起来下面的 Swift for-in循环试图通过比数组中更多的元素. 例如,这段代码: var list:[Int?] = [1,2,3,4,5,6,7]print("C-Style for loop")for var i=0; ilist.count; i++ { var x:Int = list[i]! print(x)}print("nFor-in loop")for var x:Int! in list{
看起来下面的 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读