Переместите строку, где вы добавляете новый элемент в массив сразу после инициализации изображения из _data
if let _data = data {
let image: UIImage! = UIImage(data: _data)
tempShopCells.append(ShopCell(productName: name, brandName: brand, productImage: image))
}
, также отметьте, что получение данных изображений является асинхронной задачей, поэтому данные завершения будут пустым массивом.
Поэтому я бы порекомендовал вам использовать DispatchGroup
.
Сначала создайте новый DispatchGroup
.Затем, прежде чем запрашивать данные изображения, введите - dispatchGroup
, а после получения данных оставьте dispatchGroup
.Когда будут получены данные каждого изображения, позвоните completion
при закрытии dispatchGroup.notify(queue:)
let dispatchGroup = DispatchGroup()
for child in snapshot.children.allObjects as! [DataSnapshot] {
...
dispatchGroup.enter()
imageReference.getData(maxSize: (1 * 1024 * 1024)) { (data, error) in
... // error, appending to array, etc.
dispatchGroup.leave()
}
}
dispatchGroup.notify(queue: .main) {
completion(tempShopCells)
}