2016-10-18 7 views
2

J'ai un projet swift et j'utilise Amazon Web Services.Utilisation ambiguë de `continuer` après la mise à niveau de Swift 2.2 vers Swift 3.0

J'ai une fonction responsable du téléchargement d'image à mon seau S3, à Swift 2.2, il a bien fonctionné et le code a été comme suit:

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) { 
     ... 

Maintenant, après la mise à niveau Swift 3, je:

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) { 

maintenant dans la dernière déclaration transferManager?.upload(uploadRequest).continueWithBlock renvoie une erreur qui dit

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

donc je suivre leurs conseils et changer à:

transferManager?.upload(uploadRequest).continue { 

mais il me renvoie une erreur:

Ambigous use of continue 

Les méthodes disponibles sont ici:

enter image description here

mais je Je ne suis pas sûr de ce que je pourrais utiliser dans ce cas. Pouvez-vous m'aider?

+0

'continuerAvecBit()' -> 'continuer (bloquer:)'. Dans Swift 3 'xWithY()' devient 'x (y:)'. – user28434

+0

J'ai essayé de le remplacer comme vous l'avez suggéré, mais l'erreur indique que 'AWSTask n'a aucun membre continuer (block:)' ... – user3766930

+0

Avez-vous converti le code à Swift 3 vous-même, ou c'est le code officiel des développeurs AWS lib? Si ce n'est pas votre conversion, vous devriez contacter les développeurs de lib avec ce problème, si convers est le vôtre, vous devriez toujours vérifier la source AWS lib pour mettre à jour la version 3 de Swift. Parce que cela ressemble à un mauvais cas de conversion de nom. – user28434

Répondre

4

Ok je trouve la question, il était plus facile que je pensais ... Il a été mentionné ici: https://github.com/aws/aws-sdk-ios/issues/473 et dit de changer le

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

à

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

dénomination de la méthode dans ce cas est en effet agaçant, mais cela fonctionne.