2015-08-14 12 views
26

Ben NSDictionary için sonucu döküm istiyorum Bu bölümde Alamofire.request() 'in sonuç değeri nasıl olur?

Alamofire.request(.POST, urlString, parameters: parameters as? [String : AnyObject]) 
     .responseJSON { (request, response, result) -> Void in 
      let dico = result as? NSDictionary 
      for (index, value) in dico! { 
       print("index : \(index)  value : \(value)") 
      } 
    } 

Swift 2

için Alamofire yeni sürümü hakkında bir sorum var. Ama bir kırılma noktası derlediğimde ve yazarken, hata ayıklayıcı dico'nun sıfır olduğunu söylüyor. Sonucu yazdırmak için debugDescription kullanırsam, nil değildir ve beklediğimi içerir Sonuç değişkenini nasıl alabilirim?

+2

deneyin ' dico = gibi sonuç verirse? [String: AnyObject] {...} ' – mattt

+0

Yürütülmezse, sonuç nil (ya da bir sözlükte okunamaz) olmasından kaynaklanır. Hatada ne olduğunu görmek için kontrol etmelisiniz. – mattt

+0

Ayrıca, sözlüklerin anahtarlara değil, dizinlere sahip olduğuna dikkat edin. – mattt

cevap

52

Kabul edilen yanıt harika çalışıyor ancak Alamofire 3.0.0'ın kullanıma girmesiyle bu uygulamayı etkileyen bazı kırılma değişiklikleri var.
migration guide diğer açıklamalara sahiptir ancak gerçek çözümle ilgili olanları vurgulayacağım. (Tepki hariç)

  • Response
    Tüm yanıt serializers genel Tepki yapı dönmek.

  • Response type
    Sonuç türü NSData saklamaz çift genel tür olması için yeniden tasarlandı? .Failure durumunda.

Ayrıca yanıtın içeriği ne olursa olsun, Alamofire herhangi tamamlanan isteği başarılı olmak için davranır sayısında alır. Bu nedenle .Failure kasasına .validate() zincirini .responseJSON() numaralı telefonu göndermeniz gerekir. Devamını oku ... here.

Güncelleme Kod: referans için

let url = "http://api.myawesomeapp.com" 
Alamofire.request(.GET, url).validate().responseJSON { response in 
    switch response.result { 
    case .Success(let data): 
     let json = JSON(data) 
     let name = json["name"].stringValue 
     print(name) 
    case .Failure(let error): 
     print("Request failed with error: \(error)") 
    } 
} 

:

  • Xcode 7.3 (Swift 2.2)
  • Alamofire 3.3.1
  • SwiftyJSON 2.3.3
+0

Bunun için teşekkürler. – Das

+4

Alamofire, .validate() öğesinden önce, .responseJSON {} ürününü zincirlemediğiniz sürece .Failure durumuna düşmez. Bu nedenle, HTTP durum kodu 200 aralığında olmasa bile tamamlanmış isteklerin tümünü .Success olarak ele alır. //github.com/Alamofire/Alamofire#validation –

+0

Teşekkürler @ChrisTrevarthen, bunu not etmedi. Cevap açıklamanızla güncellendi. –

37

Eğer SwiftyJSON kitaplığı kullanarak sakıncası yoksa, burada Xcode 7 Beta çalışan bir örnektir 5 + Alamofire 2.0.0-beta.1 + SwiftyJSON (xcode7 dalı)

Alamofire.request(.GET, url, parameters: params, encoding: ParameterEncoding.URL).responseJSON { (_, _, result) in 
    switch result { 
     case .Success(let data): 
      let json = JSON(data) 
      let name = json["name"].string 
     case .Failure(_, let error): 
      print("Request failed with error: \(error)") 
    } 
} 

Düzenleme:

Güncelleştirme SwiftyJSON git sayfa

+0

SwifyJSON bağlantısı bozuk :( – swiftBoy