[NSDictionary]!?不能转换为 [NSDictionary]?

[NSDictionary]!? is not convertible to [NSDictionary]?

我得到

'[NSDictionary]!? is not convertible to [NSDictionary]?' error on following code.

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

为什么会这样?

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

使用以下

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

as? 可选择转换为给定类型。因此,您最终得到类型为 [NSDictionary]! -> [NSDictionary]!? 的可选类型,它实际上不能转换为 [NSDictionary]! 但无法包装。 optinally cast 和 unwrap 没有意义,首先使用 unwrapping cast。

apple docs 在这种情况下关于可选的情况真的很有帮助!

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

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