2017-01-24 20 views
5

Official AWS tài liệu chứa các mục tiêu-c mã sauSwift 3: Chuyển phương pháp enumerateToAssignBlocks Utility chữ ký

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

Tôi đã cố gắng chuyển đổi nó thành Swift 3 (nhiệm vụ upload chỉ)

transferUtility.enumerateToAssignBlocks(forUploadTask: 
     { 

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

      progress = progressPointer 
      completion = completionPointer 

    } 
     , downloadTask: nil) 

Nhưng Xcode ném lỗi sau đây

Không thể chuyển đổi giá trị kiểu() ->() thành loại đối số dự kiến ​​[...]

Bất kỳ ai làm việc trong Swift 3? Có lẽ phương pháp chữ ký đã thay đổi

EDIT:

tôi áp dụng câu trả lời @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) 

tại Xcode nói rằng cả hai tiến độ và hoàn thành được để cho giá trị và không thể thay đổi.

+0

câu trả lời Cập nhật dựa trên những thay đổi của bạn – donkon

Trả lời

2

Phương pháp bạn đang cố sử dụng có đối số là hàm. Các chức năng này trong SDK được viết trong Objective-C. Vì vậy, bạn nên sử dụng @convention(block) để chỉ ra rằng chúng là các tham chiếu khối tương thích Objective-C.

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) 
+0

Cám ơn câu trả lời của bạn, vui lòng xem chỉnh sửa của tôi ở trên – DCDC

+0

cũng có, tại sao mã của bạn không có kết thúc? – DCDC

+0

Tôi lấy từ đây: https://github.com/awslabs/aws-sdk-ios-samples/issues/28 Bạn có thể liên hệ với nó không? Ngoài ra bạn đã thử nó trước đây chưa, điều này có đủ để làm cho nó hoạt động ngay cả khi ứng dụng đã bị hệ thống giết chết không? – DCDC

Các vấn đề liên quan