Wie man eine synchrone Anfrage mit Alamofire?
Ich versuche zu tun, eine synchrone Anfrage mit Alamofire
. Habe ich auf Stackoverflow gefunden und diese Frage: einem asynchronen alamofire Anfrage synchron.
Sah ich, dass die akzeptierte Antwort verwendet completion
zu machen Alamofire
Anfrage synchron, aber ich kann nicht machen es zu arbeiten. Dies ist mein vereinfachter code:
func loadData(completion: (Bool)) -> (Int, [String], [String], [String]){
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
switch(response.result) {
case .success(_):
if let JSON = response.result.value as! [[String : AnyObject]]!{
//Here I retrieve the data
}
completion(true)
break
case .failure(_):
print("Error")
completion(false)
break
}
}
return (numberRows, nameArray, ageArray, birthdayArray)
}
Mit diesem code, den ich erhalte eine Fehlermeldung, wenn Sie versuchen, um completion(bool value)
. Die Fehlermeldung, die ich erhalte ist folgende:
Nicht aufrufen, Wert der nicht-Funktion Typ 'Bool'
Habe ich versucht, mit einer Menge von Beispielen mit Abschluss, um die Werte synchron (weil ich brauche zum abrufen der Daten vor zu zeigen, es auf einen Tisch und zur gleichen Zeit erhalten Sie die Anzahl der Zeilen der Tabelle), ohne Erfolg.
Wie kann ich die Abwicklung, um eine synchrone Reaktion?
Vielen Dank im Voraus!
- Ich würde empfehlen, Sie bei der Umsetzung Ihrer eigenen Methode. Apple hat sehr stark davon abgeraten synchronen Netzwerk fordert. Werfen Sie einen Blick auf diese: stackoverflow.com/questions/31557688/...
- github.com/Alamofire/Alamofire/issues/1147, Sie müssen finden Sie in diesem blog. Hoffe, dies hilft Ihnen.
- Es scheint Sie nicht zu verstehen, wie asynchrone Methoden arbeiten, vor allem mit der Fertigstellung von Rückfragen. Stattdessen zwingen Sie synchrone Aufrufe, investieren, der Aufwand in das Verständnis der asynchronen Programmierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie Abschluss-handler verwenden Sie nicht zurück.
oder wenn Sie möchten, Sie kehren jeden Wert in der Schließung müssen Sie Abschluss-handler für die Rücksendung beliebigen Wert oder irgendeine Sache, wie, zum Beispiel, wenn Sie wollen, Rückgabe boolescher Wert:
und in der
loadData
oder einige denken, sonst.
Verwende ich swift 3. aber wenn Sie möchten, eine andere version der swift vorsichtig über Externe Parameter-Namen, und interne parameter-Namen, wie:
@escaping (_ number: Int, _ strArr1: [String], _ strArr2: [String], _ strArr3: [String]) -> ())
wenn Sie möchten, stellen Sie den externen parameter-Namen, müssen nur drop
_
und legen Sie den Namen für die Parameter.Beachten Sie, dass die synchrone Anfragen empfohlen wird von Apple für Gründe hingewiesen hier.
In diesem Beispiel bin ich der Vereinfachung der Anruf, wenn Sie mehr Informationen, wie der Inhalt der Zellen, schlage ich vor, Sie nehmen einen Blick auf SwiftyJSON und wieder die gesamte JSON-Blob, dann analysieren Sie diese in die entsprechenden Methoden (numberOfRows, etc.).