Griff JSON-Antwort mit Alamofire in Swift
sorry für mein schlechtes Englisch 🙂
Ich habe ein problem Parsen der JSON-Antwort über Alamofire in Swift für eine iOS-app. Ich schrieb eine Funktion, um einen string zurückzugeben, der JSON-Antwort. Die request-und response-handling, die ich mit Alamofire und die JSON-Handhabung, die ich mit SwiftyJSON. Zu Beginn erkläre ich einer var namens jsonString mit dem Wert test. Dann mache ich eine Anfrage an einen REST-Service und erhalten Sie ein JSON-Antwort durch klicken auf eine Schaltfläche. Diese Antwort möchte ich zu dem zurückkehren mit der Funktion ping(url:String). Am Ende Drucke ich die zurückgegebene Antwort als test. Aber auf den ersten Klick auf den button der return-Wert von ping ist test und nicht die JSON-Zeichenfolge der Antwort. Auf die zweite klicken Sie auf die Schaltfläche, erhalte ich den richtigen Wert zurück. Warum habe ich dieses problem. Ist die Alamofire Anforderung eine asynchrone operation? Ich möchte die Antwort zu warten. Wie kann ich das problem lösen, um den richtigen Wert auf den ersten klicken und nicht test als Wert?
Hier ist mein code:
var jsonString:String = "test"
func ping(url:String) -> String {
Alamofire.request(.GET, url)
.response {
(request, response, data, error) -> Void in
let json = JSONValue(data as? NSData)
self.jsonString = json.rawJSONString
}
return self.jsonString
}
@IBAction func checkOnlineStatus(sender: UIButton) {
let response:String = ping("http://test.com")
println(response)}
InformationsquelleAutor Martin | 2014-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den ersten Klick, der code
betrieben werden kann, bevor
erhalten Sie die null-form der selbst.jsonString in der ersten Zeit, Sie zweiten drücken wird der erste erhalten Sie auf Anfrage Daten.
Wenn Sie SwiftyJSON und Alamofire können Sie versuchen, Alamofire-SwiftyJSON
InformationsquelleAutor tangplin
Könnte man auch versuchen,
InformationsquelleAutor mharris7190
Das problem, das Sie haben ist, dass Sie versuchen, um das Ergebnis der asynchronen Methode synchron.
Haben Sie zwei Lösungen:
Habe ich geschrieben eine Antwort auf diese Frage vor ein paar Minuten auf diesen thread, ich werde vorschlagen, Sie überprüfen Sie es heraus: https://stackoverflow.com/a/33130512/422288
InformationsquelleAutor Eneko Alonso
Call Method
lassen aParams : [String : String] = [ "ReqCode" : Konstanten.kRequestCodeLogin, "StoreDCID" : strStoreID!, "CustEmail" : dictAddLogin[AddLoginConstants.kEmail]!, "Passwort" : dictAddLogin[AddLoginConstants.kPassword]!, "DeviceID" : "DeviceIDString", "DeviceType" : "iOS"]
InformationsquelleAutor Nikunj Patel