我对swift很陌生,我正试图将数据存储为2d anyobject数组。我已经声明了var internalData = [[AnyObject]]()和类似这样的结构:

struct WiFiData {
    var latency: Double
    var duration: Double
}

现在,在另一个函数中,我想切换实例变量CurrnEutter,这是枚举:
private var currentExit = Exit.A

enum Exit {
    case A
    case B
    case C
    case NotSelected
}

func someFunc() {
    switch self.currentExit {
    case .A:
    self.internalData[0].append(WiFiData(latency: 1.5, duration: 4.0) as AnyObject) // <- CRASHES ON THIS LINE
    ......// other cases
}

但是,它总是在self.internalData[0].append(WiFiData(latency: 1.5, duration: 4.0) as AnyObject)行上崩溃,并出现以下错误:
致命错误:索引超出范围
有人能告诉我为什么和怎么修吗?感谢您的帮助!

最佳答案

您用[[AnyObject]]()实例化了一个2d数组,但它仍然是空的,这意味着self.internalData[0]处没有可附加的内容。你可以做很多事情来处理这个问题,但是如果你知道你将在self.internalData中有3个数组,你也可以像这样实例化每个内部数组:

self.internalData = [[AnyObject](), [AnyObject](), [AnyObject]()]

现在在self.internalData[0]处确实有一个空数组,可以将项目附加到该数组中。
不过,看起来,如果你已经知道你将有3个WiFiData数组,那么最好创建3个变量:
var a = [WiFiData]()
var b = [WiFiData]()
etc.

然后可以按名称访问各个数组。

关于arrays - 2D阵列:索引超出范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42423889/

10-12 04:43