2017-01-24 15 views
1

我嘗試端口下面的Objective-C代碼斯威夫特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'在夫特。您需要替換指針指向的內容,不需要創建自己的指針。 – OOPer

+0

不知道如何做到這一點,你能提供基於我的問題中的例子的完整答案? – DCDC

+0

對不起,我不使用AWS的東西,所以我無法檢查我的代碼。我不會將未經檢查的代碼作爲我的政策作爲答案。你最好在你的問題中展示你迄今爲止所做的一切。即使你不是100%確定,你也可以嘗試。否則,你可能需要多一點時間來等待能夠幫助你的人。 – 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)