gpt4 book ai didi

ios - swift 3 : Transfer Utility enumerateToAssignBlocks method signature

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:43 24 4
gpt4 key购买 nike

官方 AWS 文档包含以下 objective-c 代码

 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(仅限上传任务)

transferUtility.enumerateToAssignBlocks(forUploadTask:
{

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

progress = progressPointer
completion = completionPointer

}
, downloadTask: nil)

但是Xcode抛出如下错误

Cannot convert value of type ()->() to expected argument type[...]

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

编辑:

我应用了@donkon 的回答:

        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 告诉 progress 和 completion 都是 let 值,不能改变。

最佳答案

您尝试使用的方法的参数是函数。 SDK 中的这些功能是用 Objective-C 编写的。所以你应该使用 @convention(block) 来表明它们是 Objective-C 兼容的 block 引用。

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)

关于ios - swift 3 : Transfer Utility enumerateToAssignBlocks method signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com