一尘不染

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

swift

我对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中。但是当我编译并设置一个断点时,调试器说dico为零。如果我使用debugDescription打印结果,则它不是nil,并且包含我所期望的内容。如何转换Result变量?


阅读 280

收藏
2020-07-07

共1个答案

一尘不染

可接受的答案非常有用,但是随着Alamofire 3.0.0的引入,一些重大更改会影响此实现。
迁移指南有进一步的解释,但我会强调与实际的解决方案的人。

  • 响应
    所有响应序列化器(响应除外)都返回通用的响应结构。

  • 响应类型
    结果类型已重新设计为不存储NSData的双泛型类型。 在这种.Failure情况下。

还应考虑到Alamofire会将任何已完成的请求视为成功,而不管响应的内容如何。因此,您需要先打上“ a”
.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)")
    }
}

以供参考:

  • Xcode 7.3(Swift 2.2)
  • Alamofire 3.3.1
  • SwiftyJSON 2.3.3
2020-07-07