Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从iOS(Swift)上AWS S3 bucket中并行下载对象_Ios_Swift_Amazon Web Services_Amazon S3 - Fatal编程技术网

从iOS(Swift)上AWS S3 bucket中并行下载对象

从iOS(Swift)上AWS S3 bucket中并行下载对象,ios,swift,amazon-web-services,amazon-s3,Ios,Swift,Amazon Web Services,Amazon S3,我正在尝试从一个S3存储桶中并行下载几个图像,我想知道它们是否都完成了。我能够使用我用以下签名编写的函数下载对象: func downloadImage(key: String) -> AWSTask 返回的AWSTask是来自AWSS3TransferUtility实例的: downloadDataFromBucket:key:expression:completionHander: 我想在所有下载完成后运行一些代码,因此我尝试了以下代码: for image in imageLis

我正在尝试从一个S3存储桶中并行下载几个图像,我想知道它们是否都完成了。我能够使用我用以下签名编写的函数下载对象:

func downloadImage(key: String) -> AWSTask
返回的AWSTask是来自AWSS3TransferUtility实例的:

downloadDataFromBucket:key:expression:completionHander:
我想在所有下载完成后运行一些代码,因此我尝试了以下代码:

for image in imageList {
    downloadTaskList.append(downloadImage(image))
}

AWSTask(forCompletionOfAllTasks:downloadTaskList).continueWithBlock {
        (task: AWSTask!) -> AnyObject! in
        print("All images downloaded")
        return nil
}
在这段代码中,imageList是一个字符串列表,downloadTaskList是一个所有AWSTASK都附加到其中的列表


问题是,它会在图像下载之前立即打印“所有下载的图像”。我认为这是因为下载开始时,而不是下载完成时,从downloadDataFromBucket返回的AWSTask被视为已完成。我可以在列表中添加什么任务来实现这一点?我尝试添加downloadDataFromBucket的完成处理程序,但它不是AWSTask。

我设法使用AWSTaskCompletionSource创建了自己的任务。我只需在函数顶部创建一个新的任务完成源:

let taskCompletionSource = AWSTaskCompletionSource()
return taskCompletionSource.task
我在函数末尾返回相应的任务:

let taskCompletionSource = AWSTaskCompletionSource()
return taskCompletionSource.task
最后,我在完成处理程序中将任务设置为已完成:

taskCompletionSource.setResult("Download Completed")

在出现错误的情况下,完成处理程序还调用taskCompletionSource上的setError

这不是AWS的默认实现,这真是太愚蠢了。我花了好几个小时来讨论这个问题,这是对我现有代码结构的一个简单修复!