2017-01-24 21 views
5

Resmi AWS dokümanlar aşağıdaki nesnel-c kodunu içerenSwift 3: Aktarım Programı enumerateToAssignBlocks yöntem imzası

AWSS3TransferUtility *transferUtility = [AWSS3TransferUtility defaultS3TransferUtility]; 
[transferUtility 
enumerateToAssignBlocksForUploadTask:^(AWSS3TransferUtilityUploadTask *uploadTask, __autoreleasing AWSS3TransferUtilityUploadProgressBlock *uploadProgressBlockReference, __autoreleasing AWSS3TransferUtilityUploadCompletionHandlerBlock *completionHandlerReference) { 
    NSLog(@"%lu", (unsigned long)uploadTask.taskIdentifier); 

    // Use `uploadTask.taskIdentifier` to determine what blocks to assign. 

    *uploadProgressBlockReference = // Reassign your progress feedback block. 
    *completionHandlerReference = // Reassign your completion handler. 
} 
downloadTask:^(AWSS3TransferUtilityDownloadTask *downloadTask, __autoreleasing AWSS3TransferUtilityDownloadProgressBlock *downloadProgressBlockReference, __autoreleasing AWSS3TransferUtilityDownloadCompletionHandlerBlock *completionHandlerReference) { 
    NSLog(@"%lu", (unsigned long)downloadTask.taskIdentifier); 

    // Use `downloadTask.taskIdentifier` to determine what blocks to assign. 

    *downloadProgressBlockReference = // Reassign your progress feedback block. 
    *completionHandlerReference = // Reassign your completion handler. 
}]; 
Ben Xcode atar

transferUtility.enumerateToAssignBlocks(forUploadTask: 
     { 

      let progressPointer = AutoreleasingUnsafeMutablePointer<AWSS3TransferUtilityUploadProgressBlock?>(&uploadProgressBlock) 
      let completionPointer = AutoreleasingUnsafeMutablePointer<AWSS3TransferUtilityUploadCompletionHandlerBlock?>(&completionBlock) 

      progress = progressPointer 
      completion = completionPointer 

    } 
     , downloadTask: nil) 

Ama Swift 3 içine (sadece yükleme görevi) dönüştürerek çalıştı

aşağıdaki hata

() ->() tipinin değeri beklenen parametre türüne dönüştürülemiyor [...]

Herkes Swift 3'te çalıştı mı?

 transferUtility.enumerateToAssignBlocks(forUploadTask: { (uploadTask:AWSS3TransferUtilityUploadTask, progress:AutoreleasingUnsafeMutablePointer<(@convention(block) (AWSS3TransferUtilityTask, Progress) -> Void)?>?, error: AutoreleasingUnsafeMutablePointer<(@convention(block) (AWSS3TransferUtilityUploadTask, Error?) -> Void)?>?) in 

         let progressPointer = AutoreleasingUnsafeMutablePointer<AWSS3TransferUtilityProgressBlock?>(&self.progressBlock) 
         let completionPointer = AutoreleasingUnsafeMutablePointer<AWSS3TransferUtilityUploadCompletionHandlerBlock?>(&self.completionHandler) 
     // 

         progress = progressPointer 

         completion = completionPointer 


    }, downloadTask: nil) 

şimdi Xcode hem ilerleme ve tamamlanma değerlerini izin ve değiştirilemez olduğunu söyler:

Ben @donkon cevabı uygulanan: Muhtemelen yöntem imzaları DÜZENLEME

değişti.

+0

Güncelleme cevap, aynı zamanda – donkon

cevap

2

Kullanmaya çalıştığınız yöntemde, işlevlerin bağımsız değişkenleri vardır. SDK'daki bu işlevler Objective-C'de yazılmıştır. Dolayısıyla, Object-C uyumlu blok referansları olduklarını belirtmek için @convention(block) kullanmalısınız.

AWSS3TransferUtility.default().enumerateToAssignBlocks(forUploadTask: { (uploadTask:AWSS3TransferUtilityUploadTask, uploadProgressBlockReference:AutoreleasingUnsafeMutablePointer<(@convention(block) (AWSS3TransferUtilityTask, Progress) -> Void)?>?, completionHandlerReference: AutoreleasingUnsafeMutablePointer<(@convention(block) (AWSS3TransferUtilityUploadTask, Error?) -> Void)?>?) in 
    print("Hello, world") 

    uploadProgressBlockReference?.pointee = {(task:AWSS3TransferUtilityTask, progress:Progress) -> Void in 
     print("Fraction completed: \(progress.fractionCompleted)") 
    } 
}, downloadTask: nil) 
Değişikliklerinizden Cevabınız için
+0

teşekkürler dayalı – DCDC

+0

yukarıda benim düzenlemeyi bakın, neden kod tamamlama yok? – DCDC

+0

Buradan aldım: https://github.com/awslabs/aws-sdk-ios-samples/issues/28 Bununla ilgili olabilir misiniz? Ayrıca, daha önce denediniz mi, uygulama sistem tarafından öldürüldüğünde bile çalışmasını sağlamak için bu yeterli midir? – DCDC