2017-01-24 3 views
1

Стараюсь порт следующую Objective-C кодSwift 3: Невозможно присвоить AutoreleasingUnsafeMutablePointer

[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. 
}]; 

Свифта 3

 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 



    }, downloadTask: nil) 

Что я получаю то, что прогресс есть пусть постоянная, и я не могу назначить ему.

Как это исправить?

+0

Как правило, '* someMutablePointer = SomeValue;' в Objective-C становится 'someMutablePointer.pointee = someValue' в Swift. Вам нужно заменить содержимое, указанное указателем, не нужно создавать свой собственный указатель. – OOPer

+0

Не знаете, как это сделать, можете ли вы предоставить полный ответ на основе примера в моем вопросе? – DCDC

+0

Извините, я не использую AWS, поэтому я не могу проверить свой код. Я не ставил непроверенный код в качестве ответа в качестве моей политики. И вам лучше показать, что вы делали до сих пор в своем вопросе. Вы можете попробовать, даже если вы не уверены на 100%. Или еще, вам может понадобиться немного больше времени, чтобы подождать того, кто может помочь вам с AWS. – OOPer

ответ

1

Вы можете присвоить указатель, как показано в следующем коде:

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) 
Смежные вопросы