Arrays 从Firebase读取JSON并最终得到所有相同值的数组[Swift]
好的,我有一个Firebase格式的JSON数据库,至少下面是它的一个片段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
"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而不是在函数外部声明它来修复它。我猜这与阵列的构建方式有关。在函数外部声明它只是一个对象,数组只是多次指向它,而不是创建不同的对象。