Ziemlich spät zur Party hier, aber ich habe ein Pod für unsere internen Apps geschrieben, das im Grunde genau das macht - https://cocoapods.org/pods/OfflineRequestManager. Die tatsächliche Netzwerkanfrage wird immer noch von dem übernommen, der dem OfflineRequest-Protokoll entspricht, aber das Pod bietet einen einfachen Weg, um die Anfragen in die Warteschlange zu stellen und sicherzustellen, dass sie weiterhin versuchen, bis sie erfolgreich sind, einschließlich des Speicherns auf die Festplatte.
Der einfachste Anwendungsfall würde ungefähr so aussehen, obwohl die meisten tatsächlichen Fälle (Speichern auf die Festplatte, spezifische Anforderungsdaten usw.) ein paar mehr Hürden zu überwinden haben:
import OfflineRequestManager
class SimpleRequest: OfflineRequest {
func perform(completion: @escaping (Error?) -> Void) {
doMyNetworkRequest(withCompletion: { response, error in
handleResponse(response)
completion(error)
})
}
}
///////
OfflineRequestManager.defaultManager(queueRequest: SimpleRequest())