2015-08-14 45 views
26

我有一個關於Alamofire的新版本雨燕2如何在swift 2中得到Alamofire.request()。responseJSON的結果值?

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

在本節中,我想投的結果爲NSDictionary的問題。但是,當我編譯並放置一個斷點時,調試器說dico是零。如果我使用debugDescription打印結果,它不是零,並且包含我期望的結果 如何轉換結果變量?

+2

嘗試'如果讓dico =結果爲? [String:AnyObject] {...}' – mattt

+0

如果不執行,這是因爲結果爲零(或不能向下翻譯成字典)。你應該檢查看看'error'中有什麼。 – mattt

+0

另外,值得注意的是,字典有鍵,而不是索引。 – mattt

回答

52

接受的答案很好,但隨着Alamofire 3.0.0的推出,一些突破性的變化影響了這個實現。
migration guide有進一步的解釋,但我會強調與實際解決方案有關的。

  • Response
    所有響應串行(響應除外)返回一個通用的響應結構。

  • Response type
    的結果類型已經被重新設計,是不存儲NSData的雙泛型類型?在.Failure的情況下。

另外採取在於Alamofire對待任何已完成的請求是成功的計數,而不管響應的內容的。因此,您需要在.responseJSON()之前連鎖.validate()以觸發.Failure的情況。 瞭解更多關於here

更新代碼:

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

感謝您的支持! – Das

+4

Alamofire將不會遇到.Failure情況,除非您在.responseJSON {}之前鏈接.validate(),因此它將所有完成的請求視爲.Success,即使HTTP狀態代碼不在200範圍內:https: //github.com/Alamofire/Alamofire#validation –

+0

謝謝@ChrisTrevarthen,沒有注意到。答覆更新與您的澄清。 –

37

如果你不介意使用SwiftyJSON庫,這裏是在Xcode 7測試版的工作示例5 + Alamofire 2.0.0 beta.1 + SwiftyJSON(xcode7分支)

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

編輯:

更新SwiftyJSON git頁面

+0

SwifyJSON鏈接已損壞:( – swiftBoy