【问题标题】:[NSDictionary]!? is not convertible to [NSDictionary]?[NSDictionary]!?不能转换为 [NSDictionary]?
【发布时间】:2015-09-11 18:14:13
【问题描述】:

我来了

'[NSDictionary]!?不能转换为 [NSDictionary]?以下代码出错。

  var jsonResult:[NSDictionary]! = [NSJSONSerialization.JSONObjectWithData(urlData, options:NSJSONReadingOptions.MutableContainers, error: &error1)] as? [NSDictionary]!

为什么会这样?

【问题讨论】:

  • 那不是 Swift2(见标签);-)
  • 如果标签错误,您应该提出修改建议并说明原因。它会改善那些有同样问题的人的问题!

标签: ios swift xcode6


【解决方案1】:

首先:删除NSJSONSerialization.JSONObjectWithData周围的[],如果你把它放在数组中,它会很难转换。

使用下面的

var jsonResult = NSJSONSerialization.JSONObjectWithData(urlData, options:NSJSONReadingOptions.MutableContainers, error: &error1) as! NSDictionary

as? 可以选择转换为给定的类型。因此,您最终会得到一个 [NSDictionary]! -> [NSDictionary]!? 类型的可选选项,它实际上不能转换为 [NSDictionary]! 但不可包装。选择强制转换和展开是没有意义的,只需首先使用展开转换即可。

apple docs 在这种关于可选选项的情况下非常有用!

关于我的第一点的更多解释:您将 NSJSONSerialization.JSONObjectWithData 的返回值放入一个数组中,这将导致 [AnyObject?] 不能真正转换为 [AnythingElse],因为您必须解开铸造前的选项。我不知道这样做的任何内置方式。而且它在您的场景中没有任何意义。在所有这些转换之后,您仍然可以将值包装在一个数组中,您可以通过

var jsonResult = [NSJSONSerialization.JSONObjectWithData(urlData, options:NSJSONReadingOptions.MutableContainers, error: &error1) as! NSDictionary]

【讨论】:

  • 现在我得到 [AnyOBject?] 不能转换为 [NSDictionary]
  • @MuhammadSaifullah 对不起,我想我修好了。你的代码让我很困惑——你为什么使用数组?
  • 对于 NSDictionary 它工作正常。实际上,我的 api 返回 JsonArry,如果我使用 NSDictionary 转换,我的 json 数组未序列化/转换为 NSDictionary,这就是我尝试使用 arry 的原因
  • @MuhammadSaifullah json 对象数组不是有效的 json!我认为这实际上是不可解析的。您必须将多个对象包装在容器/数组中并将其打印为 json,然后继续正常方式。
  • 谢谢@luk2302 我现在明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2018-07-17
  • 2011-10-24
  • 2010-11-27
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多