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