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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |