我不知道自己做错了什么!我只是想从Firebase数据库获取数据并迭代每个结果并将它们放入一个数组中。我尝试了不同的方法。但它们都返回结果,一次向数组添加一个结果。导致数组看起来像这样:
let ref = FIRDatabase.database().reference().child("users")
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
userUrl = snapshot.value?["profile_image_1"] as! String
imageArray.insert(userUrl, atIndex: 0)
}, withCancelBlock: { error in
print(error.description)
})
正如您所看到的,每次迭代时都会添加一个对象。 这就是我所拥有的:
let userUrl = (snapshot.value.objectForKey("profile_image_1")) as! String
imageArray.append(userUrl)
我也试过这个:
["1","2","3","4"]
我只想将每个结果放入一个数组中,我可以在完成块之外一次访问数据。
> main
idspace id x y move
198 1238 33 4 stay
641 1236 36 12 move
1515 1237 30 28 move
> move
idspace id x y move
4 1236 4 1 move
任何帮助都会很棒!
答案 0 :(得分:0)
尝试这样的事情:
var imageArray = []
func appendData(){
let ref = FIRDatabase.database().reference().child("users")
ref.observeEventType(.Value, withBlock: { snapshot in
var tempImageArray = []
for user in snapshot.children {
userUrl = user.value?["profile_image_1"] as? String
self.imageArray.insert(userUrl, atIndex: 0)
tempImageArray.append(broadcastItem)
}
self.imageArray = tempImageArray
})
}
编辑:我更新了代码,请试试这个。
答案 1 :(得分:0)
这不直接回答问题,但我假设您想在追加所有内容后访问最终数据。
我遇到了同样的问题,我通过做同样的事情来实现它,然后我在完成块中创建了一个dispatchQueue。
let ref = FIRDatabase.database().reference().child("users")
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
userUrl = snapshot.value?["profile_image_1"] as! String
imageArray.insert(userUrl, atIndex: 0)
DispatchQueue.main.async(execute: {
//access the final array here.
}
})
我希望这会有所帮助。