我遇到了错误-
无法通过下标分配:下标是只读的
这在尝试在while循环内写入数组元素时会发生,如下面的代码所示。我知道这可能是由于快速的变异性引起的,但是我对此的理解很差/没有,我正努力寻找文档。
代码-
while (counter != ((localArray.count) + 1))
{
data[counter] = /// The error flags on this line for the data array
[
"type" : localArray[counter][0],
"details" : localArray[counter][1],
"cost" : localArray[counter][2]
]
counter = counter + 1
}
编辑D4ttatraya-
“数据”被声明为
var data: [[String: String]]?
and localArray是函数结果的副本-
var result: [[String]] = []
let localArray = result
答案 0 :(得分:3)
首先创建一个空的logstash
数组,而不是声明data
数组的类型
data
第二,我建议您将var data = [[String: String]]()
内部的每个内部数组的while循环替换为for-each循环(然后,可以使用每个localArray
中的元素来代替使用counter
变量) 。
array
现在循环中,您只需将新元素附加到for array in localArray {
}
数组
data
还要在循环开始时确保每个data.append(["type": array[0],
"details": array[1],
"cost": array[2]])
内有三个元素(如果没有继续到其他内部数组的话)
array
因此整个for-each循环应如下所示:
guard array.count == 3 else { continue }
答案 1 :(得分:1)
您的数据是可选的,因此您需要先创建数据,然后才能向其中添加内容,同时您还需要通过localArray进行枚举,然后才将其添加到数据的末尾,以便可以执行类似的操作
var data = [[String: String]]();
for theLocal in localArray {
data.append([
"type" : theLocal[0],
"details" : theLocal[1],
"cost" : theLocal[2]
]);
}
答案 2 :(得分:0)
data
是可选的,但是您尝试将其作为非可选值访问。尝试data?[counter]
或if var data = data { data[counter] = ... }