类型'[String,AnyObject?]'不符合协议AnyObject?:为什么?

Kam*_*tka 15 dictionary compiler-errors nsdictionary literals swift

我试图理解为什么我有编译错误:类型'[String,AnyObject?]'不符合协议AnyObject?

var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ]  // <-- error
Run Code Online (Sandbox Code Playgroud)

好像cars不是AnyObject?我不明白.

谢谢你的帮助!

Jef*_*mas 24

AnyObject必须是一个类,但它Dictionary是一个结构.

Swift编程语言:类型转换

AnyObject可以表示任何类类型的实例.

Swift编程语言:类和结构

Swift的String,Array和Dictionary类型实现为结构.


你可以用它Any?来达到这个目的.

var cars: [String: Any?] = [ "model": "Ferrari"]
var JSON: [String: Any?] = [ "cars": cars ]
Run Code Online (Sandbox Code Playgroud)

在看了这个之后,有一个微妙的问题导致它破裂.

这是一个有效的示例:

var cars: [String: AnyObject] = [ "model": "Ferrari"]
var JSON: [String: AnyObject] = [ "cars": cars ]
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为cars被强制(隐式转换)[String: AnyObject]到与之兼容的对象NSDictionary ([AnyHashable: AnyObject]).NSDictionary然后将此兼容对象强制转换为AnyObject.所以,魔术.

[String: AnyObject?]不能以这种方式施放,因为它不NSDictionary兼容,所以强制失败.