我在下面具有以下功能。 当我运行此命令时,首先打印“ hit2222”,然后打印“ hit4444”,最后打印“图像已下载”。
不是应该先打印“图像已下载”,因为print(“ hit2222”)处于关闭状态,而getImages仅在下载完每个图像后才会执行?
func updateCurrentUser() {
getImages(completion: { downloadedImages in
print("hit2222")
})
print("hit444")
self.currentUser.user.images = [UIImage(systemName: "star"), nil, nil, nil, nil, nil, nil, nil, nil]
}
func getImageFromStorage(imagePath: String, completion: @escaping(UIImage?) -> Void) {
// downloads one image from our database
let storageRef = Storage.storage().reference()
let pathReference = storageRef.child(imagePath)
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
pathReference.getData(maxSize: 1 * 1024 * 1024) { data, error in
if error != nil {
print("error hit : \(error!.localizedDescription)")
} else {
let myImage = UIImage(data: data!)
print("Image downloaded successfully")
completion(myImage)
}
}
}
func getImages(completion: @escaping([UIImage?]) -> Void) {
// downloads multiple images by calling getImageFromStorage multiple times
var downloadedImages: [UIImage?] = []
for i in 0...8 {
let imagePath = "/img" + String(i)
getImageFromStorage(imagePath: imagePath, completion: { myImage in
downloadedImages.append(myImage)
})
}
completion(downloadedImages)
}
答案 0 :(得分:1)
如果您有多个异步请求,并且需要等待所有异步请求完成,则可以在组中的所有任务完成时使用DispatchGroup
通知您。
对于您而言,您需要等到所有图像下载完毕后才能调用completion
的{{1}}函数
getImages