web-dev-qa-db-fra.com

Swift - Comment parcourir NSDictionary

Salut, j'apprends actuellement Swift, et je voulais extraire des données d'un API JSON, mon code Swift ressemble à ceci. Pour être précis, j'ai besoin d'extraire chaque clé et sa valeur , (par exemple: imprimer la valeur du titre, la couverture etc.)

//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
   }
}

et la structure de mon JSON est

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

Aidez-moi!

23
Mahi008

Voici comment vous pouvez traiter un JSON donné:

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)\"")
    }
}

Remarques:

N'oubliez pas que vous recevez des objets analysés sous la forme NSDictionary et lorsque vous parcourez le dictionnaire, l'ordre dans lequel vous recevez les propriétés peut différer de l'ordre dans le JSON d'origine.

44
Keenle

Vérifiez ce morceau de code pour référence:

// 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()

    })

}

Cela devient particulièrement difficile lorsque vous analysez la valeur de la clé dans l'objet utilisable qui est l'endroit où le NSObject vient à la rescousse afin que vous puissiez obtenir les valeurs de la clé.

4
AppsWise