首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3:传输实用程序enumerateToAssignBlocks方法签名

Swift 3:传输实用程序enumerateToAssignBlocks方法签名
EN

Stack Overflow用户
提问于 2017-01-24 10:51:43
回答 2查看 1K关注 0票数 7

正式的AWS文档包含以下目标-c代码

代码语言:javascript
复制
 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.
 }];

我试着把它转换成Swift 3(仅上传任务)

代码语言:javascript
复制
transferUtility.enumerateToAssignBlocks(forUploadTask:
        {

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

            progress = progressPointer
            completion = completionPointer

    }
        , downloadTask: nil)

但是Xcode引发以下错误

无法将类型()->()的值转换为预期的参数类型.

有人让它在Swift 3里工作吗?方法签名可能已经更改。

编辑:

我申请了@donkon的回答:

代码语言:javascript
复制
        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)

现在,Xcode告诉我们,进度和完成都是let值,不能更改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 20:46:04

您尝试使用的方法具有函数参数。SDK中的这些函数是在Objective中编写的。因此,您应该使用@convention(block)来表明它们是与Objective兼容的块引用。

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2018-11-02 05:20:55

不值得迅速地与那种方法作斗争,只要绕过它就行了。我敢肯定这件事也是这么做的。

代码语言:javascript
复制
 func handleForeground() {
    if let multiPartUploadTasks = self.transferUtility.getMultiPartUploadTasks().result, let uploads = multiPartUploadTasks as? [AWSS3TransferUtilityMultiPartUploadTask] {
        for upload in uploads {
            upload.setProgressBlock(self.progressBlock)
            upload.setCompletionHandler(self.completionBlock)
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41826267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档