2016-10-18 1 views
2

У меня есть проект swift, и я использую там Amazon Web Services.Неоднозначное использование `continue` после обновления от Swift 2.2 до Swift 3.0

У меня есть функция, которая отвечает за загрузку изображения на мой S3 ведро, в Swift 2.2 он работал хорошо, и код был следующим:

let credentialsProvider = AWSCognitoCredentialsProvider(regionType:CognitoRegionType, 
                  identityPoolId:CognitoIdentityPoolId) 
    let configuration = AWSServiceConfiguration(region:CognitoRegionType, credentialsProvider:credentialsProvider) 
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 



let uploadRequest = AWSS3TransferManagerUploadRequest() 
uploadRequest.body = NSURL(string: "file://"+pathToFile) 
uploadRequest.key = NSProcessInfo.processInfo().globallyUniqueString + "." + ext 
uploadRequest.bucket = S3BucketName 
uploadRequest.contentType = contentType + ext 

let transferManager = AWSS3TransferManager.defaultS3TransferManager() 
    transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in 

     if (task.completed) { 
     ... 

Теперь, после обновления до Swift 3, у меня есть:

let credentialsProvider = AWSCognitoCredentialsProvider(regionType:CognitoRegionType, 
                  identityPoolId:CognitoIdentityPoolId) 
    let configuration = AWSServiceConfiguration(region:CognitoRegionType, credentialsProvider:credentialsProvider) 
    AWSServiceManager.default().defaultServiceConfiguration = configuration 



let uploadRequest = AWSS3TransferManagerUploadRequest() 
uploadRequest?.body = URL(string: "file://"+pathToFile) 
uploadRequest?.key = ProcessInfo.processInfo.globallyUniqueString + "." + ext 
uploadRequest?.bucket = S3BucketName 
uploadRequest?.contentType = contentType + ext 

let transferManager = AWSS3TransferManager.default() 
    transferManager?.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in 

     if (task.isCompleted) { 

Теперь в последнем заявлении transferManager?.upload(uploadRequest).continueWithBlock выдает ошибку, которая говорит

'continueWithBlock' has been renamed to 'continue(_:)' 

поэтому я следую их советам и изменить его на:

transferManager?.upload(uploadRequest).continue { 

но потом он бросает мне ошибку:

Ambigous use of continue 

Доступные методы здесь:

enter image description here

но я Я не знаю, что я могу использовать в этом случае. Можете ли вы мне помочь?

+0

'continueWithBlock()' -> 'continue (block:)'. В Swift 3 'xWithY()' становится 'x (y:)'. – user28434

+0

Я попытался заменить его, как вы предложили, но тогда ошибка говорит: «AWSTask не имеет ни одного члена continue (block:)' ... – user3766930

+0

Вы преобразовали код в Swift 3 самостоятельно или это официальный код от разработчиков AWS lib? Если это не ваше преобразование, вам следует связаться с разработчиками lib с этой проблемой, если ваш разговор является вашим, вы все равно должны проверить источник AWS lib для обновления до версии Swift 3. Потому что это выглядит как неудачный вариант преобразования имени. – user28434

ответ

4

Ok Я нашел этот вопрос, это было проще, чем я думал ... Это было упомянуто здесь: https://github.com/aws/aws-sdk-ios/issues/473 и сказал, чтобы изменить

transferManager?.upload(uploadRequest).continue { ... } 

к

transferManager?.upload(uploadRequest).continue ({ ... }) 

метод именования в этом случае действительно раздражает, но он работает.

Смежные вопросы