斯威夫特:停业执行令

时间:2020-06-08 00:10:42

标签: swift

我在下面具有以下功能。 当我运行此命令时,首先打印“ 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)
}

1 个答案:

答案 0 :(得分:1)

如果您有多个异步请求,并且需要等待所有异步请求完成,则可以在组中的所有任务完成时使用DispatchGroup通知您。

对于您而言,您需要等到所有图像下载完毕后才能调用completion的{​​{1}}函数

getImages