我对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/