Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析

Posted

技术标签:

【中文标题】Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析【英文标题】:Alamofire 4 Request is returning NSArray, cannot figure out how to parse with SwiftyJSON in Swift 3 【发布时间】:2016-09-27 18:56:30 【问题描述】:

这个 Alamofire .POST 请求和 SwiftyJSON 解析的先前版本在 Swift 2.2 和 Xcode 7 上运行良好。更新到 Swift 3.0,这需要安装更新的 Alamofire (4.0.0) 和更新的 SwiftyJSON。经过一些语法调整后,现在一切都可以编译了。

问题是我的 Web 应用程序现在似乎返回了一个 NSArray,而之前,当代码工作时,一个几乎相同的 Request 得到一个 SwiftyJSON 将解析的 NSData 返回。以下代码显示了请求:

   Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
   .responseJSON  (response:DataResponse<Any>) in

                    if let data = response.result.value as? Data 

永远不会分配数据变量,因为响应类型不是 NSData。尝试通过将最后一行更改为该类型来强制转换:

    let data = response.result.value as! Data

那个版本编译得很好,但是一旦你触发请求,你就会得到一个错误:Could not cast value of type '__NSArrayI' (0x105a37c08) to 'NSData'

请注意,请求正在按预期返回数据。在之前的 Alamofire 中,这个数据是 NSData,没有采取任何行动来转换它。既然从上述错误中可以看出返回的数据已经是一个数组,那么它是否已经被 Alamofire 解析了?或者有什么办法可以让 SwiftyJSON 像以前一样解析它?

编辑

由于当前返回的类型是一个 NSArray,并且 Web 应用正在发送一个数组,所以 SwiftyJSON 解析似乎不再需要?尝试了以下代码:

Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
.responseJSON  (response:DataResponse<Any>) in

let testdata = response.result.value as! NSArray
print(testdata[0])

在 Xcode“所有输出”屏幕中产生了这个输出:


  1 = "08/01/16";
  2 = 285;
  3 = 160;

我不清楚这是否意味着 testdata 是数组数组、字典数组或未解析字符串数组。因此,作为回答“如何从这个 Alamofire 请求中获得 NSData 响应”问题的替代方法,对“可以使用哪一行代码(如果有的话)从上面显示的 NSArray 测试数据?”也能解决问题。

【问题讨论】:

您的 Web 服务是否返回 JSON 数组? 是的,它确实返回一个 JSON 编码的数组。 【参考方案1】:

如果您从此更改数据初始化行:

if let data = response.result.value as? Data 

到这里:

let data = response.data

然后,请求会产生一个 NSData 返回,它可以像以前一样被 SwiftyJSON 解析。工作请求和解析代码如下所示:

Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
.responseJSON  (response:DataResponse<Any>) in

let data = response.data
let jsonvalues = JSON(data: data!)

可能需要添加一些错误处理,但这与手头的问题无关。

【讨论】:

以上是关于Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析的主要内容,如果未能解决你的问题,请参考以下文章

将 Alamofire NSData 解析为数组

如何编写返回响应的alamofire请求函数?

请求失败时从 AlamoFire 获取 JSON 响应

返回 POST 请求的 Alamofire 路由器

如何从方法返回 alamofire Http 请求的结果?

Alamofire 请求最初返回值,但在通过完成处理程序时被接收为 nil