我有一个具有“ post /(randID)”结构的Firebase数据库,还有从Item类继承的Post类。我已经编写了一个快照函数,该函数可以正确获取所有子节点的值,但是现在尝试仅对与我已经拥有的名称数组的元素匹配的post / children进行快照。
我正确地获取了值,但没有在断点处将临时值正确附加到我的Item数组中。任何帮助将不胜感激
-----------代码-----------
func getWavePosts() {
self.tempPosts = []
for name in self.tempNames {
var postRef = Database.database().reference().child("posts/\(name)")
postRef.observe(.value, with: {snapshot in
var test = snapshot.value as? [String:Any]
var author = test!["author"] as? [String:Any]
var uid = author!["uid"] as? String
var username = author!["username"] as? String
var photoURL = author!["photoURL"] as? String
var url = URL(string: photoURL!)
var imageURL = test!["imageURL"] as? String
var text = test!["text"] as? String
var timestamp = test!["timestamp"] as? Double
var userProfile = UserProfile(uid: uid!, username: username!, photoURL: url!)
var post = Post(id: name, author: userProfile, text: text!, timestamp: timestamp!, imageURL: imageURL!)
self.tempPosts.append(post)
//print(self.tempPosts)
//self.items = self.tempPosts
})
//self.items = self.tempPosts
}
print(self.tempPosts.count)
print(self.items.count)
}
答案 0 :(得分:1)
首先,您的函数应将completion
的{{1}}数组作为参数
Post
...现在让我们与func getWavePosts(_ completion: @escaping ([Post]) -> () )
见面。
首先在foreach循环之前声明新的DispatchGroup
。然后,在DispatchGroup
observe
之前输入postRef
,然后将收到的dispatchGroup
追加到数组(在函数中定义此数组,不要使用全局变量)之后,离开{{ 1}}。将每个Post
添加到数组后,请在dispatchGroup
结束时调用Post
completion
然后,当您调用此方法时,就可以在此方法的结尾处访问收到的帖子
dispatchGroup.notify(queue:)