我一直在尝试从Firebase检索一些数据并将其存储在数组中。但是当我尝试附加数据时遇到了一个问题。
我只能将数据存储在数组的内部和外部,而突然间我失去了数组内部的所有值。为什么会这样?请帮助我找到我所缺少的...
hero.id
答案 0 :(得分:1)
可能是因为您在闭包内分配数据,这可能会在稍后发生。所以基本上最后一个打印语句出现在闭包语句之前。
我建议您使用 didSet 来理解序列。例如:
var names: [String] = [String]() {
didSet {
print(names) // this is print each time the value is set
}
}
var txts: [String] = [String]() {
didSet {
print(txts)
}
}
var imgUrls: [String] = [String]() {
didSet {
print(imgUrls)
}
}
Database.database().reference().child("Posts").child("dummy").observe(.value) { (snapshot) in
guard let snapshots = snapshot.children.allObjects as? [DataSnapshot] else { return }
for snap in snapshots {
let autoId = snap.key as String
Database.database().reference().child("Posts").child("dummy").child(autoId).observe(.value, with: { (snapshot) in
guard let data = snapshot.value as? [String: Any] else {return}
//name
guard let name = data["name"] as? String else {return}
self.names.append(name)
//image
guard let imgUrl = data["image"] as? String else {return}
self.imgUrls.append(imgUrl)
//txt
guard let txt = data["text"] as? String else {return}
self.txts.append(txt)
}
}