2017-11-22 4 views
0

Ich habe versucht, eine Funktion zu machen, die aus einem JSON API erhalten, aber die Funktion gibt den Wert schneller als die AlamoFire Anfrage ... Könnte mir jemand dabei helfen? Vielen Dank. Code ist unten.Swift Request Daten von JSON Api

func trainNameToTelecode(trainName: String) -> String { 
    var returnTelecode: String = "" 
    Alamofire.request("http://tra.ink/api/query/train?name=\(trainName)").responseJSON { (response) in 
     let result = response.result 
     guard let resultDict = result.value as? Dictionary<String,AnyObject> else {return} 
     guard let bodyDict = resultDict["body"] as? [String:AnyObject] else {return} 
     returnTelecode = bodyDict["telecode"] as! String 
    } 
    return returnTelecode 
} 

Antwort

1

Sie können einen Abschluss-Handler verwenden, die Sie die Zeichenfolge zurück, wenn Ihre Anfrage zum Beispiel abgeschlossen ist,:

func trainNameToTelecode(trainName: String, completion: (String) -> Void) { 
    Alamofire.request("http://tra.ink/api/query/train?name=\(trainName)").responseJSON { (response) in 
     let result = response.result 
     guard let resultDict = result.value as? Dictionary<String,AnyObject> else {return} 
     guard let bodyDict = resultDict["body"] as? [String:AnyObject] else {return} 

     if let returnTelecode = bodyDict["telecode"] as? String { 
      completion(returnTelecode) 
     } else { 
      completion("telecode is nil") 
     } 
    } 
} 

//and where you call your function: 
self.trainNameToTelecode(trainName: "yourName") { (telecode) in 
    print(telecode) 
} 
+0

u so much danken –