Swift NSJSONSerialization.JSONObjectWithData不';不能处理空数据

Swift NSJSONSerialization.JSONObjectWithData不';不能处理空数据,swift,swift2,Swift,Swift2,我有一个从mySQL服务器下载数据的数据下载程序类。 我遇到的问题是当结果为空时-应用程序崩溃并显示错误消息 无法将类型为“\uu NSArray0”(0x105548918)的值强制转换为“NSMutableArray”(0x105549c00) 不要说as!NSMUTABLEARRY。术语as的意思是“撞车”,所以当你撞车时,你几乎不会感到惊讶。说as?NSMUTABLEARRY。测试结果是否为nil。如果是nil,则停止 if let jsonResult = try NSJSONSeri

我有一个从mySQL服务器下载数据的数据下载程序类。 我遇到的问题是当结果为空时-应用程序崩溃并显示错误消息

无法将类型为“\uu NSArray0”(0x105548918)的值强制转换为“NSMutableArray”(0x105549c00)


不要说
as!NSMUTABLEARRY
。术语
as
的意思是“撞车”,所以当你撞车时,你几乎不会感到惊讶。说
as?NSMUTABLEARRY
。测试结果是否为
nil
。如果是
nil
,则停止

if let jsonResult = try NSJSONSerialization.JSONObjectWithData(self.data, options:NSJSONReadingOptions.AllowFragments) as? NSMutableArray {
    self.jsonResult = jsonResult
}
您可能仍然有问题,因为这永远不会是一个可变数组;它只是一个数组。因此,您可能必须将其更改为:

if let jsonResult = try NSJSONSerialization.JSONObjectWithData(self.data, options:NSJSONReadingOptions.AllowFragments) as? NSArray {
    self.jsonResult = NSMutableArray(array: jsonResult)
}
(但是,正如瓦迪安在评论中所说,如果您可以放弃使用NSArray和NSMutableArray而改用Swift类型,那就更好了。)

像这样试试

if NSJSONSerialization.isValidJSONObject(data) {
   //your do catch
}

这应该可以解决您的问题。

应用程序在哪里崩溃?在哪一行上?它在JSONESREST上崩溃。尝试NSJSONSerialIZIt.JSONObjutsWordBasic不使用Swift中的可变基础集合类型,因为它们与快速的本地类型无关,不能被桥接也不能被铸造。改用本机类型。使用
var
您可以免费获得可变性。@瓦迪安的好建议,感谢您的回复!JSON返回空括号[],因此长度为5字节。如果data.length>5,我是否可以计算它将始终为~5并添加此条件?我决定不喜欢我的答案,所以我更改了它。问题是
as。这很正常……是的,这正是我所需要的。第二个选项起作用了,现在它提供了一个我可以计数的数组。谢谢!!我很高兴这能奏效!但你还是应该听瓦迪安的建议…:)在这两种情况下,这都是无效数据——有效的JSON和空的JSON。无论如何谢谢你!它返回了无效的JSON,尽管它是您放入函数中的有效JSON?这很难相信,但你的问题已经解决了,所以这并不重要。
if NSJSONSerialization.isValidJSONObject(data) {
   //your do catch
}