我试图理解为什么我有一个编译错误:类型'String,AnyObject?‘不符合AnyObject?协议
var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: AnyObject?] = [ "cars": cars ] // <-- error看起来cars不是AnyObject吗?但我不明白。
谢谢你的帮忙!
发布于 2014-09-23 14:22:13
AnyObject必须是一个类,但Dictionary是一个结构。
AnyObject可以表示任何类类型的实例。
Swift的字符串、数组和字典类型作为结构实现。
为此,您可以使用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,因此强制失败。
发布于 2014-09-23 14:56:07
汽车似乎不是AnyObject?
您将cars定义为[String: AnyObject?]类型,因此,以下代码是有效的(在游乐场中进行了测试):
var cars: [String: AnyObject?] = [ "model": "Ferrari"]
var JSON: [String: [String: AnyObject?]] = [ "cars": cars ]您应该将JSON定义为[String: AnyObject?]或[String: Any?]类型(根据您的需要),前提是您无法猜出cars的类型(请参阅Swift编程语言中的Any和AnyObject的类型铸造 )。
这会影响我的对象向NSDictionary的投射吗?
NSDictionary不能容纳nil (参见这里或这里)。以下代码给出了游乐场中的错误消息:
var nsDict1: NSDictionary = [12 : 10, 10 : nil] //eror message
var cars: [String: AnyObject?] = [ "model" : nil]
var JSON: [String: [String: AnyObject?]] = [ "cars" : cars ]
let nsDict2 = JSON as NSDictionary //error message然而,下列代码是有效的:
var nsDict1: NSDictionary = [12 : 10, 10 : NSNull()] //no error message
var cars: [String: AnyObject] = [ "model" : "Ferrari"] //also works with [ "model" : NSNull()]
var JSON: [String: [String: AnyObject]] = [ "cars" : cars ]
let nsDict2 = JSON as NSDictionary //no error messagehttps://stackoverflow.com/questions/25997376
复制相似问题