2014-07-15 20 views
19

Ciao Attualmente sto imparando Swift, e volevo estrarre i dati da un JSON Api, Il mio codice Swift si presenta così. Per essere precisi, ho bisogno di estrarre ogni chiave e il suo valore, (ad esempio: stampare il valore del titolo, copertina, ecc ..)Swift - Come ciclo attraverso NSDictionary

//Json request 
var error: NSError? 
var raw = NSString.stringWithString("http://example.com/MovieAPI/api/v1/movies/") 
var api_url = NSURL.URLWithString(raw) 
let jsonData: NSData = NSData.dataWithContentsOfURL(api_url, options: nil, error: &error) 
let result = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) 
as NSDictionary 
for val in result { 
    for (var i=0; i < val.value.count; i++){ 
     //println(val.value.valueAtIndex(3)) Not Working 
    } 
} 

e la struttura del mio JSON è

{ 
    data: [ 
     { 
     id: 2, 
     title: "Hunger Games", 
     cover: "http://example.com", 
     genre: 2 
     } 
    ] 
} 

Help!

+0

Beh già passato attraverso questo link e la soluzione di questo legame mi ha dato un valore di ritorno pari a zero e un errore ** Tipo non è conforme alla sequenza di protocollo ** – Mahi008

+1

Così si chiedeva la domanda sbagliata. L'ho riaperto. Il supposto duplicato era [Iterare attraverso un dizionario in Swift] (http://stackoverflow.com/questions/24111627/iterating-through-a-dictionary-in-swift) –

risposta

39

Ecco come è possibile elaborare un dato JSON:

let dataArray = result["data"] as NSArray; 

print("Data items count: \(dataArray.count)") 

for item in dataArray { // loop through data items 
    let obj = item as NSDictionary 
    for (key, value) in obj { 
     print("Property: \"\(key as String)\"") 
    } 
} 

Osservazioni:

Ricordate che si ricevono gli oggetti analizzati come NSDictionary e quando si scorrere attraverso il dizionario, l'ordine in cui si riceve le proprietà potrebbero differire dall'ordine nel JSON originale.

+0

Grazie! Funziona! e un'altra domanda, questa dichiarazione è giusta? lasciare risultato = NSJSONSerialization.JSONObjectWithData (jsonData, opzioni: nil, errore: & errore) come NSDictionary, perché crea perdita di memoria – Mahi008

+0

Cosa perdite 'jsonData' o' result'? – Keenle

+0

Fa filtrare "risultato" come questo [immagine] (http://i58.tinypic.com/2vsql50.jpg). – Mahi008

3

controllare questo pezzo di codice di riferimento:

// MARK: - Firebase 
func retrieveData(){ 
    ref.observe(FIRDataEventType.value, with: { (snapshot) in 
     let postDict = snapshot.value as! [String : AnyObject] 
     let contactList = postDict["contacts"]! 
     let user = FIRAuth.auth()!.currentUser 

     let contactArray = contactList[user!.uid]! as! NSDictionary 

     for (key,_) in contactArray { 

      let contact:NSObject = contactArray[key] as! NSObject 
      let firstName:String! = contact.value(forKey: "firstName") as? String 
      let lastName:String! = contact.value(forKey: "lastName") as? String 
      let company:String! = contact.value(forKey: "company") as? String 
      let phone:String! = contact.value(forKey: "phone") as? String 
      let email:String! = contact.value(forKey: "email") as? String 

      print(contact.value(forKey: "firstName")!) 
      contacts.append(Contact(firstName:firstName, lastName: lastName, company: company, phone: phone, email: email)) 
     } 
     self.tableView.reloadData() 

    }) 

} 

Diventa specialmente difficile quando si analizza il valore della chiave nell'oggetto utilizzabile che è dove il NSObject viene in soccorso in modo da poter ottenere i valori per la chiave .

Problemi correlati