Ios Swift 3:传输实用程序,失败后如何重试上载?

Ios Swift 3:传输实用程序,失败后如何重试上载?,ios,swift,amazon-web-services,amazon-s3,aws-sdk,Ios,Swift,Amazon Web Services,Amazon S3,Aws Sdk,这是我的completionHandler的外观: self.completionHandler = { (task, error) -> Void in DispatchQueue.main.async(execute: { if ((error) != nil){ //retry upload } else{ //success

这是我的completionHandler的外观:

self.completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            if ((error) != nil){

                //retry upload
            }

            else{

                //success
            }
        })

    }
我没有看到任何方法可以调用
任务
重试它,我只看到
继续
方法,但不确定如何使用它

我第一次开始上传的方式如下:

transferUtility.uploadData(
        data as Data,
        bucket: "test",
        key: "testTU3/try\(Date()).jpeg",
        contentType: "image/jpeg",
        expression: expression,
        completionHander: completionHandler).continue(successBlock: { (task) -> AnyObject! in
            if let error = task.error {
                NSLog("Error: %@",error.localizedDescription);

            }
            if let exception = task.exception {
                NSLog("Exception: %@",exception.description);

            }
            if let _ = task.result {

                NSLog("Upload Starting!")
                // Do something with uploadTask.
            }

            return nil;
        })
失败后如何在completionHandler中重试上载

编辑:

这是我试过的

 self.completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            if ((error) != nil){
                guard let data = task.request?.httpBody else {return}
                self.uploadData(data: data as NSData, bucket: task.bucket, key: task.key)

            }

            else{
            }
        })
    }
但问题是我无法获得请求的实际数据,因为

task.request?.httpBody
计算结果为零


这样的方法好吗?我知道这可能会导致无休止的运行循环

传输实用程序不支持重试,失败后您必须自己拨打电话


关于你的代码。如果调用
continue(successBlock:)
方法,则仅当上载成功时才会执行块内的代码。还有另一种变体
continue(block:)
,即使出现错误也会执行。

传输实用程序不支持重试。失败后,您必须自己进行调用


关于你的代码。如果调用
continue(successBlock:)
方法,则仅当上载成功时才会执行块内的代码。还有另一个变体
continue(block:)
,即使出现错误也会执行。

您希望得到什么数据?我想这将是我以前在该请求中发送的数据,在我的情况下,我不认为在您返回的请求中会设置数据。这可能相当大。那么,有什么方法可以从任务中提取此数据吗?您想要访问传递到方法中的数据吗?您希望获得什么数据?我想它将是我在该请求中发送的数据,在我的情况下,此图像我不认为数据将在您返回的请求中设置。这可能会相当大。那么,有没有办法从任务中提取此数据?是否希望访问传递到方法中的数据?