Alamofire使用swift 3下载多个图像

时间:2017-02-10 09:48:06

标签: ios swift3 alamofire

我目前有一个字符串数组,其中包含大约三千个用于下载图像的网址。我已经设置了以下函数来将url数组传递到:

   func downloadAllImages(urlArray:[String])->Void{
    var urlArray = urlArray
    let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)
    var TotalProducts = urlArray.count
    for i in 0 ..< urlArray.count  {
        Alamofire.download(
            urlArray[i],
            method: .get,
            to: destination).downloadProgress(closure: { (progress) in
                self.IndividualImage.text="\(progress.fractionCompleted*100)%"

            }).response(completionHandler: { (DefaultDownloadResponse) in
                TotalProducts-=1
                self.DownloadLabel.text="Images left to download: \(TotalProducts)"
                print("\(DefaultDownloadResponse.error)")
                print("\(DefaultDownloadResponse.response)")
            })
    }
}

这样可以正常工作,但是在800-900图像之间下载并且停止之后它往往会被切断。它没有输出任何错误。当我循环遍历每个url并创建一个任务时,我想我只能同时执行很多并发任务。有什么想法吗?



更新

我已经完成了输出响应,发现很多都是超时的:

Optional(Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x60800145b840 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=www.MYURL.com/image1.jpg, NSErrorFailingURLKey=www.MYURL.com/image1.jpg, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.})


所以这很明显,因为for循环将所有内容一次性地发送到任务,然后它只能同时处理这么多。所以答案是分批发送。但是,我如何发送一批50,然后等待每个任务完成,然后发送另一个波?

0 个答案:

没有答案