我试图理解为什么会出现编译错误:类型“[String, AnyObject?]”不符合 AnyObject 协议?
var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ] // <-- error
这好像是cars
不是 AnyObject 吗?我不明白。
感谢您的帮助!
AnyObject
必须是一个类,但是Dictionary
是一个结构体。
Swift 编程语言:类型转换 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html
AnyObject 可以表示任何类类型的实例。
Swift 编程语言:类和结构 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_135
Swift 的 String、Array 和 Dictionary 类型都是作为结构体实现的。
您可以使用Any?
以此目的。
var cars: [String: Any?] = [ "model": "Ferrari"]
var JSON: [String: Any?] = [ "cars": cars ]
仔细观察之后,发现有一个微妙的问题导致了这个问题的发生。
这是一个有效的示例:
var cars: [String: AnyObject] = [ "model": "Ferrari"]
var JSON: [String: AnyObject] = [ "cars": cars ]
它有效是因为cars
被强制(隐式投射)自[String: AnyObject]
到兼容的对象NSDictionary ([AnyHashable: AnyObject])
. This NSDictionary
然后将兼容对象转换为AnyObject
。所以,魔法。
[String: AnyObject?]
不能以这种方式铸造,因为它不是NSDictionary
兼容,所以强制失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)