gpt4 book ai didi

swift - For-in 循环走得太远,在展开时发现 'nil'

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:00 24 4
gpt4 key购买 nike

看起来下面的 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! 解包。要安全地解包,请使用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
}

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

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

关于swift - For-in 循环走得太远,在展开时发现 'nil',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com