我突然收到类型字典的错误:
var parameters = [String: AnyObject]()
然后如果我尝试:
parameters["cancelled_by"] = someUser ?? ""
我收到的错误是:
无法将String类型的值赋值为AnyObject?
这是Swift 3.0
。我在这做错了什么?为什么不起作用?
答案 0 :(得分:6)
String
是值类型。 AnyObject
仅接受引用类型。因此,为了在Dictionary
使用Any
而不是AnyObject
中添加值类型和引用类型,即
var parameters = [String: Any]()
这是Swift 3.0的补充。
答案 1 :(得分:1)
我现在开始使用Swift 3,有点晚了......但是,直到Swift 2.2,一些Swift值类型自动桥接到相应的基础引用类型,例如String
到{{1} },NSString
到Dictionary<>
,等等。看起来这个自动桥接已经在Swift 3中删除了。
有些情况下,将NSDictionary
转换为[String : AnyObject]
是有道理的,而其他情况则不然,这取决于您正在做什么。在我目前的情况下,我需要引用类型,但它没有。
所以我通过强制转换到[String : Any]
来请求明确的桥接来解决问题:
AnyObject
供参考:
var dictionary: [String : AnyObject] = [:]
dictionary["valueType"] = "Value Type" // Error
dictionary["referenceType"] = "Reference Type" as AnyObject // OK