无法在while循环内写入数组-下标仅获得

时间:2018-12-07 10:02:38

标签: swift cocoa

我遇到了错误-

无法通过下标分配:下标是只读的

这在尝试在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 

3 个答案:

答案 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] = ... }