2017-04-12 4 views
-1

Ich bin mit dieser Alamofire Anfrage und ein json RückkehrAlamofire Anfrage Antwort?

let todoEndpoint: String = "https://api.abc.com/api/v3/products?pid=uid8225&format=json&&offset=0&limit=10" 
    Alamofire.request(todoEndpoint) 
     .responseJSON { response in 
      guard let json = response.result.value as? [String: Any] else { 
       print("didn't get todo object as JSON from API") 
       print("Error: \(response.result.error)") 
       return 
      } 
      print(json) 

} 

Jetzt habe ich Schleife tun, wo ich diesen json Wert verwenden mag, aber ich bin immer:

Fehler: Verwendung von ungelöster Kennung json ?

do { 

     for (index,subJson):(String, JSON) in json { 

print("Index :\(index) Title: \(subJson)") 

} catch 
{ 

      print("there was an error") 

} 

Wie bereits erwähnt:.

https://github.com/Alamofire/Alamofire#response-string-handler "das Ergebnis einer Anfrage in dem Rahmen einer Antwort Schließung nur verfügbar Jede Ausführung abhängig von der Antwort oder Daten, die von dem Server durchgeführt werden muß innerhalb einer Antwort Schließung. "

Wie kann ich diesen Json-Wert außerhalb des Bereichs der Antwort Schließung verwenden?

Können Sie bitte schreiben i

Gibt es einen Abschluss-Handler müssen vorschlagen und wie es getan werden kann?

Dank

+0

Mögliches Duplikat von [JSON-Parsing mit dem neuen Swift 3 und Alamofire] (http://stackoverflow.com/questions/39468516/parsing-json-using-the-new-swift-3-and-alamofire) –

+0

GS , haben Sie versucht, nach der Lösung zu suchen, da diese Frage nach mehr als 30 Threads gefragt wurde: https://www.google.se/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q= alamofire + json + antwort + swift + stackoverflow –

+1

du 'do' block sollte direkt nach dem wächter dh' guard laufen lassen sonst {...} HIER'. Momentan machst du es in einem Bereich, der 'json' nicht existiert. – Honey

Antwort

1

Besser die SwiftyJson für einfache json mit Almofire Parsen verwenden wie unten:

import Alamofire 
import SwiftyJSON 

static func getRequest(urlString: URL?, Parameter:NSDictionary?, completion: @escaping (_ serverResponse: AnyObject?,_ error:NSError?)->()){ 

     Alamofire.request(urlString!, parameters:nil, headers: nil).responseJSON { response in 

      if(response.result.value != nil){ 
       let serverResponse = JSON(response.result.value!) 
       print("Array value is \(serverResponse.arrayValue)") 


        completion(serverResponse as AnyObject?, nil) 
      } 
      else{ 
       completion(nil, response.result.error as NSError?) 
      } 
     } 

    } 

Sie diese Funktion wie NetworkLayer in einer separaten Klasse schreiben kann und es dann für die WebService aus jeder Klasse aufrufen Rufen Sie wie folgt auf:

Hinweis: Sie können auch das Parameterwörterbuch darin übergeben.

+1

Vermeiden Sie die mehrfache Antwort auf Duplikate. –

+1

Ok, ich werde mich darum kümmern. – Aashish1aug

+0

Hallo Sneak, dieses Problem ist etwas anders als das, was in dem Thread, den Sie erwähnt haben, gefragt wurde, wie ich durch die Links aber nicht in der Lage war, Antwort zu erhalten –