在 Swift 中使用 JSON 的 Alamofire 请求后,如何在 AnyObject 中转换 <AnyObject> 响应?

Posted

技术标签:

【中文标题】在 Swift 中使用 JSON 的 Alamofire 请求后,如何在 AnyObject 中转换 <AnyObject> 响应?【英文标题】:How to convert <AnyObject> response in AnyObject after an Alamofire request with JSON in Swift? 【发布时间】:2015-09-18 10:06:51 【问题描述】:

所以我想向应该返回 JSON 文件的特定 API 发送请求。

我正在使用 Alamofire 来获取 JSON 对象:

dataFromAPI : JSON
Alamofire.request(.GET, myURL).responseJSON  (_, _, data) -> Void in
               dataFromAPI = JSON(data)
            

我的问题是数据是一个 AnyObject 数组,而 JSON 函数需要一个 AnyObject 类型。如何将一个转换为另一个或解决问题?

【问题讨论】:

【参考方案1】:

不确定我是否收到了您的问题,但会尝试为您提供一个示例,说明我是如何做到的。 根据您的情况更改代码。

Alamofire.request(.GET, myURL)
    .validate(statusCode: 200..<300)
    .validate(contentType: ["application/json"])
    .responseJSON  request, response, jsonResult in
        switch jsonResult 
        case .Success:
            if let data = jsonResult.value as? AnyObject 
                self.dataFromAPI = JSON(data)
            
        case .Failure(_, let error):
            print(error)
        

通常我不会对 AnyObject 进行解包,因为这没什么意义。 我通常解开到[String: AnyObject],因为我期待我的 API 中的 Dictionary,然后我尝试将其转换为我的自定义模型类。

如果我没有理解问题,请纠正我。 :)

【讨论】:

【参考方案2】:

Alamofire 返回一个Result&lt;AnyObject&gt; 对象。您应该在提取 JSON 之前检查结果是成功还是失败:

Alamofire.request(.GET, myURL)
    .responseJSON  request, response, result in
        switch result 
        case .Success(let JSON):
            print("Success with JSON: \(JSON)")

        case .Failure(let data, let error):
            print("Request failed with error: \(error)")

            if let data = data 
                print("Response data: \(NSString(data: data, encoding: NSUTF8StringEncoding)!)")
            
        
    

【讨论】:

以上是关于在 Swift 中使用 JSON 的 Alamofire 请求后,如何在 AnyObject 中转换 <AnyObject> 响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSON.serializer 在 Swift 中解析 JSON

用于 PUT 方法的 Alamofire Content-Type application/json

在 Swift 中使用 nil 值解析 JSON

在 Swift 4 中使用 Decodable 解析 JSON

在 Swift 中写入 JSON 中的***类型无效

在 Swift 中使用动态键解析 JSON [重复]