Swift:索引越界错误,我很困惑

brvekthn  于 2023-05-05  发布在  Swift
关注(0)|答案(1)|浏览(137)

我不能理解为什么这个“索引越界”错误发生。我想知道什么是“索引越界”和“索引超出范围”之间的区别,以及为什么我的代码会导致错误。谢谢大家。
密码

var input = readLine()!.split(separator: " ").map{Int($0)!}
var arr = input[1...20]

for (i, a) in arr.enumerated() {
    print(i, a)
}
print(arr[0]) // Index out of bounds

输入
输出

0 900
1 901
2 902
3 903
4 904
5 905
6 906
7 907
8 908
9 909
10 910
11 911
12 912
13 913
14 914
15 915
16 916
17 917
18 918
19 919
Swift/SliceBuffer.swift:287: Fatal error: Index out of bounds
2023-05-04 15:01:32.280783+0900 SwiftAlgorithm[86091:6733992] Swift/SliceBuffer.swift:287: Fatal error: Index out of bounds
Program ended with exit code: 9
zxlwwiss

zxlwwiss1#

这是因为数组切片并没有复制元素并创建一个新数组,而是创建了一个指向初始数组的“指针”,因此索引在这里的应用方式与新数组的应用方式不同。这是为了存储器效率的益处而以这种方式实现的。这在Apple developer documentation中有很好的描述,以及如何从初始数组中保留索引。

相关问题