我试图理解为什么我有一个编译错误:Type '[String, AnyObject?]' does not conform to protocol AnyObject?
var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ] // <-- error
cars
似乎不是 AnyObject?我不明白。
感谢您的帮助!
最佳答案
AnyObject
必须是一个类,但是 Dictionary
是一个结构。
The Swift Programming Language: Type Casting
AnyObject can represent an instance of any class type.
The Swift Programming Language: Classes and Structures
Swift’s String, Array, and Dictionary types are implemented as structures.
您可以为此目的使用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])
。这个 NSDictionary
兼容对象然后被转换为 AnyObject
。所以,魔法。
[String: AnyObject?]
不能以这种方式进行转换,因为它与 NSDictionary
不兼容,因此转换失败。
关于dictionary - 类型 '[String, AnyObject?]' 不符合 AnyObject 协议(protocol)? : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997376/