2014-07-15 34 views
19

Merhaba Şu anda Swift'i öğreniyorum ve bir JSON Api'den veri almak istedim, Swift kodum böyle görünüyor. spesifik olmak gerekirse, ben her anahtarı ve değeri çıkarmak gerekir (örneğin: yazdırmak başlığın değerini .. vb kapak) benim JSON yapısıSwift - NSDictionary üzerinden döngü nasıl yapılır

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

ve olduğu

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

Yardım! Eğer NSDictionary olarak çözümlenen nesneleri almak ve sipariş sözlükten yineleme zaman aldığınız unutmayın

:

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

Açıklamalar: Burada

+0

Zaten bu bağlantı üzerinden gitti ve bu bağlantının çözümü bana NIL bir dönüş değeri verdi ve bir hata ** Tip protokolü Sıra ** – Mahi008

+1

uymuyor Yani yanlış soru sordu. Yeniden açtım. Sözde yinelenen [Swift bir sözlükte yineleme] oldu (http://stackoverflow.com/questions/24111627/iterating-through-a-dictionary-in-swift) –

cevap

39

belirli bir JSON işleyebilir nasıl özellikler orijinal JSON'daki siparişten farklı olabilir.

+0

Teşekkürler! işe yarıyor! ve bir soru daha, bu beyan doğru mu? result = NSJSONSerialization.JSONObjectWithData (jsonData, seçenekler: nil, hata: & error) NSDictionary olarak , çünkü bellek sızıntısı yaratıyor – Mahi008

+0

Ne 'jsonData' veya 'result' sızıntısı? – Keenle

+0

Bu [image] gibi "sonuç" üzerinde sızdırıyor (http://i58.tinypic.com/2vsql50.jpg). – Mahi008

3

Kontrol başvuru için bu kod parçası: Eğer NSObject Eğer anahtar için değerler elde edebilirsiniz böylece kurtarmaya gelene olduğunu kullanılabilir nesnesine anahtar değeri ayrıştırmak zaman

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

    }) 

} 

özel olarak zor alır .