gpt4 book ai didi

arrays - 使用数组值初始化新的数组元素

转载 作者:行者123 更新时间:2023-11-28 13:19:21 24 4
gpt4 key购买 nike

我整理了以下示例代码:

let tings = [1, 2, 4, 5, 6, 8]

class Foo {
var number: Int
init(something: Int) {
self.number = something
}
}

var list: [Foo] = []
for num in tings {
var temp = Foo(something: tings[num]) //excbadinstruction invop
list.append(Foo(something: 3)) //no error
list.append(Foo(something: Int(4))) //no error
list.append(Foo(something: tings[num])) //excbadinstruction invop
list.append(Foo(something: Int(tings[num]))) //excbadinstruction invop
}

我不明白最后两行有什么问题,因为在我看来 things[num] 也是 Int 类型,当然最后一行也一样。

如果我将事物的类型指定为 [Int],什么都不会改变(这对我来说并不奇怪)我还必须明确声明“某事:”,这是我没想到的,因为它是初始化程序的第一个也是唯一一个参数。

我希望任何人都可以向我解释这一点和/或给出正确的方法。

最佳答案

Swift Playground 很有趣,但在调试方面却非常糟糕。

如果我们在实际可编译和构建的应用程序中复制此代码,我们不会收到构建时警告或错误。然而,一旦我们点击播放并运行代码,问题就很明显了。控制台打印:

fatal error: Array index out of bounds

问题来了……我们的数组有六个元素。这意味着最大可访问索引为 5。

看看我们的循环:

for num in tings {
// do stuff
}

如果我们将循环更改为打印 num,如下所示:

for num in tings {
println(num)
}

你会看到它打印了我们的 tings 数组:

1
2
4
5
6
8

现在让我们访问每个索引处的元素:

for num in tings {
println(tings[num])
}

打印什么?

2
4
6
8
fatal error: Array index out of range

发生了什么事?

我们试图访问第 6 个索引,因为循环的第五次迭代,数组的第五个元素,是 Int 6。我们试图访问第 6 个元素,它是超出我们数组的范围。


如果您尝试迭代 tings 的元素并为每个元素实例化一个 Foo,您只需要这样:

for num in tings {
list.append(Foo(something: num))
}

或者正如 Paul 在评论中指出的那样,如果您需要索引,您可以这样遍历循环:

for (index, value) in enumerate(tings) {
// do stuff
}

关于arrays - 使用数组值初始化新的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139217/

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