webentwicklung-frage-antwort-db.com.de

Swift - Durchlaufen von NSDictionary

Hallo, ich lerne gerade Swift und wollte Daten aus einer JSON-API extrahieren. Mein Swift sieht so aus. Um genau zu sein, muss ich jeden einzelnen Schlüssel und seinen Wert extrahieren , (zum Beispiel: Drucke den Wert von Titel, Deckblatt usw ..)

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

und die Struktur meines JSON ist

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

Hilfe!

23
Mahi008

So können Sie einen bestimmten JSON verarbeiten:

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

Bemerkungen:

Denken Sie daran, dass Sie analysierte Objekte als NSDictionary erhalten. Wenn Sie das Wörterbuch durchlaufen, kann die Reihenfolge, in der Sie Eigenschaften erhalten, von der Reihenfolge in der ursprünglichen JSON abweichen.

44
Keenle

Überprüfen Sie diesen Code als Referenz:

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

    })

}

Besonders schwierig wird es, wenn Sie den Schlüsselwert in das verwendbare Objekt analysieren, in dem sich das NSObject befindet, um die Werte für den Schlüssel abzurufen.

4
AppsWise