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 进行解析的主要内容,如果未能解决你的问题,请参考以下文章