2017-01-24 12 views
5

सरकारी एडब्ल्यूएस डॉक्स निम्नलिखित उद्देश्य-सी कोड शामिलस्विफ्ट 3: स्थानांतरण उपयोगिता enumerateToAssignBlocks विधि हस्ताक्षर

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

मैं स्विफ्ट 3 में परिवर्तित करने की कोशिश की (अपलोड कार्य केवल)

transferUtility.enumerateToAssignBlocks(forUploadTask: 
     { 

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

      progress = progressPointer 
      completion = completionPointer 

    } 
     , downloadTask: nil) 

लेकिन Xcode फेंकता निम्न त्रुटि

प्रकार() ->() से अपेक्षित तर्क प्रकार के मूल्य को परिवर्तित नहीं कर सकता [...]

किसी ने इसे स्विफ्ट 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 

         completion = completionPointer 


    }, downloadTask: nil) 

अब Xcode बताता है कि दोनों प्रगति और पूरा मान जाने जाते हैं और बदला नहीं जा सकता:

मैं @donkon जवाब लागू होता है।

+0

अपने परिवर्तनों – donkon

उत्तर

2

जिस विधि का आप उपयोग करने का प्रयास कर रहे हैं वह तर्क हैं जो कार्य हैं। एसडीके में ये कार्य उद्देश्य-सी में लिखे गए हैं। तो आपको यह इंगित करने के लिए @convention(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) 
+0

अपने जवाब के लिए धन्यवाद के आधार पर जवाब अपडेट किया गया, कृपया – DCDC

+0

भी ऊपर मेरे संपादन देखते हैं, यही कारण है कि अपने कोड पूरा होने की जरूरत नहीं है? – DCDC

+0

मैंने इसे यहां से लिया: https://github.com/awslabs/aws-sdk-ios-samples/issues/28 क्या आप उससे संबंधित हो सकते हैं? क्या आपने इसे पहले भी आजमाया है, क्या यह सिस्टम द्वारा ऐप की हत्या के दौरान भी काम करने के लिए पर्याप्त है? – DCDC