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是一个结构.
AnyObject可以表示任何类类型的实例.
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兼容,所以强制失败.