Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从Firebase读取JSON并最终得到所有相同值的数组[Swift]_Arrays_Json_Swift_Firebase_Append - Fatal编程技术网

Arrays 从Firebase读取JSON并最终得到所有相同值的数组[Swift]

Arrays 从Firebase读取JSON并最终得到所有相同值的数组[Swift],arrays,json,swift,firebase,append,Arrays,Json,Swift,Firebase,Append,好的,我有一个Firebase格式的JSON数据库,至少下面是它的一个片段 "Trips" : { "-KnH34F_WZYNHMsTzj0X" : { "Distance" : 500, "Transport" : "Walk", "TripName" : "Work" }, "-KnH3_WnQaD3piXI7oFf" : { "Distance" : 900

好的,我有一个Firebase格式的JSON数据库,至少下面是它的一个片段

   "Trips" : {
        "-KnH34F_WZYNHMsTzj0X" : {
          "Distance" : 500,
          "Transport" : "Walk",
          "TripName" : "Work"
        },
        "-KnH3_WnQaD3piXI7oFf" : {
          "Distance" : 900,
          "Transport" : "Bike",
          "TripName" : "Test"
        },
        "-KnH7yi4bl2oM6LobPQv" : {
          "Distance" : 50,
          "Transport" : "Bike",
          "TripName" : "Test"
        },
然后,我使用下面的代码筛选数据并将其附加到Trip对象数组中

 Database.database().reference().child("Users").child(user).child("Trips").observe(DataEventType.childAdded, with: { (snapshot) in

            let dict = snapshot.value as? NSDictionary

            if dict?["Distance"] != nil {
                self.commuteBuilder.distance = dict?["Distance"] as? Double
            }
            if dict?["TripName"] != nil {
                self.commuteBuilder.title = dict?["TripName"] as? String
            }
            if dict?["Transport"] != nil {
                self.commuteBuilder.transportType = (dict?["Transport"] as? String)
            }

         //   if self.commuteBuilder.isFilled(){

                self.commuteArray.append(self.commuteBuilder)
                print("Append")


                self.commuteTableView.reloadData()
     //       }


        })
当我设置断点时,新的CommunicateBuilder对象会正确地填充数据,但一旦添加,CommunicateBuilder数组中的每个值都会与添加到其中的最后一个对象具有相同的数据

因此,在上面的示例中,数组将以3个条目结束,但它们都具有TripName:Test和Distance:50以及Transport Bike

我也知道代码很乱,我一直在挣扎

self.commuteArray.append(self.commuteBuilder)

我想这就是问题所在。创建一个临时构建器对象。将检索到的数据放入该临时对象中。将临时对象附加到数组中。

我相信您是正确的。我通过在函数内部声明CommunicateBuilder而不是在函数外部声明它来修复它。我猜这与阵列的构建方式有关。在函数外部声明它只是一个对象,数组只是多次指向它,而不是创建不同的对象。