Burada geri aramalar hariç, herhangi bir parametre olan herhangi zaman uyumsuz işlevine uygulanabilecek bir genel çözüm nasıl yapılacağı konusunda kılavuzluk istiyorum benim kodudur. Sadece success
ve failure
geri aramaları ile mantığı basitleştirdim, progress
eklemek çok zor olmamalı.
Yani, varsayarak işlevi bu gibi olduğunu:
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()
})
}
böyle olmazdı eşleşen bir retry
fonksiyonu:
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)
}
})
}
ve bunun gibi çağrılabilir:
retry(3, task: startUploading,
success: {
print("Succeeded")
},
failure: { err in
print("Failed: \(err)")
})
Yukarıdakiler, üç kez startUploading
numaralı çağrıyı yeniden dener. Başarısız kalır, aksi takdirde ilk başarıda duracaktır.
Düzenle. eğer öyleyse size ağ çağrısından sonra nesneyi yapmak
İşte
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)")
}
)
Kontrol dışarı cevabım Benzer bir soru için: http://stackoverflow.com/a/38720898/319805 – MNassar