У меня есть массив, содержащий идентификаторы сообщений, затем я выполняю цикл for
, извлекаю содержимое каждого сообщения и добавляю сообщение в массив сообщений. После завершения цикла мне нужно вернуть массив сообщений в обработчике завершения.
Однако .observeSingleEvent является асинхронным методом, поэтому содержимое сообщений извлекается из Firebase, обработчик завершения (сообщений) уже выполняется, что возвращает пустой массив. Я хочу вернуть массив после того, как каждое сообщение будет добавлено к массиву, подобно тому, как эти методы синхронизируются.
static func getPost(postKeys:[String], completionHandler: @escaping ([Post])->()){
var posts = [Post]()
for postKey in postKeys{
let postRef = DataService.ds.REF_POSTS.child(postKey)
postRef.observeSingleEvent(of: .value, with: { (snapshot) in
if let postDict = snapshot.value as? Dictionary<String, Any>{
//create a post and append it to the post array
let key = snapshot.key
let post = Post(postKey: key, postData: postDict)
posts.append(post)
}
})
}
completionHandler(posts)
}