ここでコールバックを除いて、パラメータはありません任意の非同期関数に適用することができ、一般的なソリューションです行う方法についていくつかのガイダンスをしたいと思います私のコードです。 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
コールを3回再試行します失敗し続ける、そうでなければ最初の成功で停止する。
を編集します。ここで
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