Swift 下载阵列中的所有图像后返回函数[AlamofireImage]

Swift 下载阵列中的所有图像后返回函数[AlamofireImage],swift,alamofire,Swift,Alamofire,我目前有一个带有completionHandler的函数,它应该返回从数组下载的图像的计数,但不幸的是,该函数返回得太早,并且计数总是0(似乎completionHandler值是在函数完成之前返回的。我如何修复此问题?) 使用信号量的函数 func downloadImages (completionHandler: (Int) -> ()) -> () { let semaphore = dispatch_semaphore_create(0)

我目前有一个带有completionHandler的函数,它应该返回从数组下载的图像的计数,但不幸的是,该函数返回得太早,并且计数总是0(似乎completionHandler值是在函数完成之前返回的。我如何修复此问题?)

使用信号量的函数

 func downloadImages (completionHandler: (Int) -> ()) -> () {
        let semaphore = dispatch_semaphore_create(0)

        for index in data {
            dispatch_semaphore_signal(semaphore)

            let URLRequest = NSURLRequest(URL: NSURL(string: index.artworkUrl512)!)
            downloader.downloadImage(URLRequest: URLRequest) { response in
                if let image = response.result.value {
                    cardImages.append(image)
                    print(image)
                }
            }
        }
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
        completionHandler(cardImages.count)
    }

再看一遍,我觉得我可能已经把你们引向了一条不好的道路,所以我收回了我的答案。总的来说,我对这里发生的事情不太满意。我建议你重新思考一下你在这里想要实现的目标。最终目标是什么?你在解决什么样的用户体验?嘿,George,我只是想澄清一下,你的问题是
completionHandler(cardImages.count)
在下载所有照片之前返回的吗?@ChrisWagner最终目标是将图像添加到自定义的
视图控制器
,快照
viewcontroller
并保存要使用的图像later@LaurentRivard是的,这是目前的问题,这篇文章的答案来自
gnasher729
:。
 func downloadImages (completionHandler: (Int) -> ()) -> () {
        let semaphore = dispatch_semaphore_create(0)

        for index in data {
            dispatch_semaphore_signal(semaphore)

            let URLRequest = NSURLRequest(URL: NSURL(string: index.artworkUrl512)!)
            downloader.downloadImage(URLRequest: URLRequest) { response in
                if let image = response.result.value {
                    cardImages.append(image)
                    print(image)
                }
            }
        }
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
        completionHandler(cardImages.count)
    }