如何获得Alamofire.request()。responseJSON在swift 2中的结果值?
我有一个关于Swift 2的新版本Alamofire的问题
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。 但是当我编译并放置一个断点时,debugging器说dico是零。 如果我使用debugDescription打印结果,它不是零,并包含我所期望的如何投出结果variables?
接受的答案很好,但随着Alamofire 3.0.0的推出,有一些突破性的变化影响了这个实现。
迁移指南有进一步的解释,但我会强调与实际解决scheme有关的。
-
响应
所有的响应串行器(除了响应)都返回一个通用的响应结构。 -
响应types
结果types已被重新devise为不存储NSData的双genericstypes? 在.Failure
情况下。
还要指望Alamofire将任何已完成的请求视为成功,而不pipe响应的内容如何。 因此,您需要在.responseJSON()
之前链接一个.responseJSON()
以处理.Failure
事件。 在这里阅读更多关于它。
更新的代码:
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
如果你不介意使用SwiftyJSON库,下面是Xcode 7 Beta 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页面