Во-первых, ваша функция должна иметь completion
с массивом Post
в качестве параметра
func getWavePosts(_ completion: @escaping ([Post]) -> () )
... теперь давайте встретимся с DispatchGroup
.
Сначала объявим новый DispatchGroup
перед циклом foreach.Затем, перед тем как вы observe
postRef
войдете в dispatchGroup
и после добавления полученного Post
к массиву (определите этот массив в функции, не используйте глобальную переменную), оставьте dispatchGroup
.Когда каждый Post
добавляется в массив, вызывайте completion
при закрытии dispatchGroup.notify(queue:)
func getWavePosts(_ completion: @escaping ([Post]) -> () ) {
var tempPosts = []
let dispatchGroup = DispatchGroup()
for name in self.tempNames {
dispatchGroup.enter()
var postRef = Database.database().reference().child("posts/\(name)")
postRef.observe(.value, with: { snapshot in
...
tempPosts.append(post)
dispatchGroup.leave()
})
}
dispatchGroup.notify(queue: .main) {
completion(tempPosts)
}
}
Затем у вас есть доступ к полученным сообщениям при закрытии этого метода, когда вы вызываете его
getWavePosts { posts in
... // do whatever you want to
}