यहाँ एक सामान्य समाधान है कि किसी भी async समारोह कोई पैरामीटर है, कॉलबैक छोड़कर करने के लिए लागू किया जा सकता है ऐसा करने के लिए पर कुछ मार्गदर्शन चाहते हैं। मैंने केवल success
और failure
कॉलबैक करके तर्क को सरल बना दिया, progress
को जोड़ना मुश्किल नहीं होना चाहिए।
तो, यह सोचते हैं अपने कार्य इस तरह है:
func startUploading(success: Void -> Void, failure: NSError -> Void) {
DDLogDebug("JogUploader: Creating jog: \(self.jog)")
API.sharedInstance.createJog(self.jog,
failure: { error in
failure(error)
}, success: {_ in
success()
})
}
मिलान यह इस प्रकार दिखाई देगा एक retry
समारोह:
func retry(numberOfTimes: Int, task: (success: Void -> Void, failure: NSError -> Void) -> Void, success: Void -> Void, failure: NSError -> Void) {
task(success: success,
failure: { error in
// do we have retries left? if yes, call retry again
// if not, report error
if numberOfTimes > 1 {
retry(numberOfTimes - 1, task: task, success: success, failure: failure)
} else {
failure(error)
}
})
}
और इस तरह कहा जा सकता है:
retry(3, task: startUploading,
success: {
print("Succeeded")
},
failure: { err in
print("Failed: \(err)")
})
उपर्युक्त startUploading
कॉल तीन बार फिर से प्रयास करेगा विफल रहता है, अन्यथा पहली सफलता पर रोक देगा।
संपादित करें। कार्य करना है कि अन्य पैरामीटर है बस एक बंद में एम्बेड किया जा सकता:
func updateUsername(username: String, success: Void -> Void, failure: NSError -> Void) {
...
}
retry(3, { success, failure in updateUsername(newUsername, success, failure) },
success: {
print("Updated username")
},
failure: {
print("Failed with error: \($0)")
}
)
चेक आउट इसी तरह के प्रश्न के लिए: http://stackoverflow.com/a/38720898/319805 – MNassar