首页 > 解决方案 > Swift:二维数组中的索引超出范围

问题描述

我正在使用字符串的二维数组。当我初始化它时,我用默认值字符串填充它。当我想从中访问元素时,出现超出范围错误

class MyClass: UIViewController, {

var bodies = [[String]]()

override func viewDidLoad() {
    super.viewDidLoad()

    setBodies()

    if isBodiesEmpty() {
        //setRefreshButton()
    }
}

private func setBodies() {
    var bodies = Array(repeating: Array(repeating: "default", count: 6), count: 4)

...

    bodies[2][0] = "string 2 0"
    bodies[2][1] = "string 2 1"

...

}

private func isBodiesEmpty() -> Bool {
    if bodies[2][0].isEmpty {
        return true
    }
    if bodies[2][0].contains("default"){ 
        return true
    }
    return false
}
}

两个都

if bodies[2][0].isEmpty 

if bodies[2][0].contains("default")

抛出“线程 1:致命错误:索引超出范围”

但是,如果我打印数组的一个元素,它会起作用:

print("bodies[2][0] =="+bodies[2][0])

显示:“字符串 2 0”

一定有一些微不足道的东西我忽略了,但我不知道是什么

标签: arraysswift

解决方案


是的,这是一件微不足道的事情,也是一个非常常见的错误。这条线

var bodies = Array(repeating: Array(repeating: "default", count: 6), count: 4)

创建一个不是属性的本地数组。只需删除bodies bodiesvar

bodies = Array(repeating: Array(repeating: "default", count: 6), count: 4)

推荐阅读