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

Alamofire 4 Request is returning NSArray, cannot figure out how to parse with SwiftyJSON in Swift 3

此 Alamofire 的先前版本。POST 请求和 SwiftyJSON 解析在 Swift 2.2 和 Xcode 7 中工作正常。更新为 Swift 3.0,需要安装更新的 Alamofire (4.0.0) 和更新的 SwiftyJSON。经过一些语法调整后,现在一切都可以编译了。

问题是我的网络应用程序现在看起来是 return 一个 NSArray,而之前,当代码工作时,一个几乎相同的请求得到一个 NSData return SwiftyJSON会解析。以下代码显示请求:

   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

该版本编译正常,但一旦触发请求,就会出现错误:无法将类型“__NSArrayI”(0x105a37c08) 的值转换为 'NSData'

请注意,请求正在按预期 return 发送数据。在之前的 Alamofire 中,这个数据是 NSData,没有采取任何操作来转换它。由于从上述错误看来 returned 数据已经是一个数组,它是否已经被 Alamofire 解析?或者有什么办法可以让 SwiftyJSON 像以前一样解析它吗?

编辑

由于当前被 returned 的类型是一个 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 "All Output" 屏幕中产生了这个输出:

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

我不清楚这是否意味着 testdata 是数组数组、字典数组或未解析字符串数组。因此,作为回答 "How can one obtain an NSData response from this Alamofire request" 问题的替代方法,回答 "What one line of code, if any, can be used to obtain the integer value 285 from the NSArray testdata shown above?" 问题也可以解决问题。

如果您将数据初始化行更改为:

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

对此:

let data = response.data

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

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

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

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