如何在swift 2中获取Alamofire.request().responseJSON的结果值?

Edg*_*gel 31 json ios swift alamofire swift2

我有一个关于新版Alamofire for Swift 2的问题

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)")
            }
    }
Run Code Online (Sandbox Code Playgroud)

在本节中,我想将结果转换为NSDictionary.但是当我编译并设置断点时,调试器说dico是零.如果我使用debugDescription打印结果,它不是nil并包含我所期望的如何转换Result变量?

Jav*_*diz 56

接受的答案很有效,但随着Alamofire 3.0.0的推出,有一些重大变化会影响这种实现.
迁移指南有进一步的解释,但我会强调与实际的解决方案的人.

  • 响应
    所有响应序列化程序(响应除外)都返回一个通用的响应结构.

  • 响应类型
    结果类型是否已重新设计为不存储NSData的双通用类型?在这种.Failure情况下.

同时记录Alamofire处理任何已完成的请求是否成功,无论响应的内容如何.所以,你需要链.validate()之前.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)")
    }
}
Run Code Online (Sandbox Code Playgroud)

以供参考:

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

  • 在Alamofire 4.0中,数据现在是"任意".你怎么处理? (5认同)
  • 除非你在.responseJSON {}之前链接.validate(),否则Alamofire不会命中.Failure案例,因此它会将所有已完成的请求视为.Success,即使HTTP状态代码不在200范围内:https:/ /github.com/Alamofire/Alamofire#validation (4认同)

che*_*mic 38

如果您不介意使用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)")
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

更新了SwiftyJSON git页面