无法将String类型的值赋值为AnyObject类型? Swift 3.0

时间:2016-09-22 05:33:26

标签: ios swift swift3

我突然收到类型字典的错误:

var parameters = [String: AnyObject]()

然后如果我尝试:

parameters["cancelled_by"] = someUser ?? ""

我收到的错误是:

  

无法将String类型的值赋值为AnyObject?

这是Swift 3.0。我在这做错了什么?为什么不起作用?

2 个答案:

答案 0 :(得分:6)

String值类型AnyObject仅接受引用类型。因此,为了在Dictionary使用Any而不是AnyObject中添加值类型和引用类型,即

var parameters = [String: Any]()

这是Swift 3.0的补充。

答案 1 :(得分:1)

我现在开始使用Swift 3,有点晚了......但是,直到Swift 2.2,一些Swift值类型自动桥接到相应的基础引用类型,例如String到{{1} },NSStringDictionary<>,等等。看起来这个自动桥接已经在Swift 3中删除了。

有些情况下,将NSDictionary转换为[String : AnyObject]是有道理的,而其他情况则不然,这取决于您正在做什么。在我目前的情况下,我需要引用类型,但它没有。

所以我通过强制转换到[String : Any]来请求明确的桥接来解决问题:

AnyObject

供参考:

var dictionary: [String : AnyObject] = [:]
dictionary["valueType"] = "Value Type" // Error
dictionary["referenceType"] = "Reference Type" as AnyObject // OK