Swift3,如何在字典中添加AnyObject?

问题描述:

我有我的文件conveted到Swift3,一个字典就像Swift3,如何在字典中添加AnyObject?

var Detail: [String:[String:AnyObject]] = [ 
     "0":["0":["number":0,"imageName":"40"]], 
     "1":["0":["number":1,"imageName":"3setting"],"1":["number":1,"imageName":"3private"],"2":["number":1,"imageName":"3currency"]], 
     "2":["0":["number":1,"imageName":"3favourite"],"1":["number":1,"imageName":"3favourite"]], 
     "3":["0":["number":1],"1":["number":1]], 
     ] 

我工作完全过去,但今天它提醒

语境型“AnyObject”不能用字典字面

使用

但为什么现在不工作? 为什么会发生这种情况,以及如何解决它?

+0

如果你的内部字典有静态键,那么你应该将它们建模为'struct's。另外,如果你的外部字典的键只能是整数,那么就让它们成为'Int' - 如果它们是连续的,那么你最好使用数组来代替。总的来说,你可能需要'[[SomeStruct]]'。 – Hamish

[String:Any]而不是[String:AnyObject],你会没事的。至于“发生了什么”:自动桥接消失了(例如,在Int和NSNumber之间,或者String和NSString之间)。因此,像["imageName":"3setting"]这样的字面字典被推断为[String:String],并且在期望[String:AnyObject]的地方不能被分配 - 因为String是而不是是AnyObject。但一个字符串肯定是一个Any,因为的一切是一个Any。

你也可以通过编写["number":1 as NSNumber, "imageName":"3setting" as NSString](因为NSNumber或NSString AnyObject)来解决这个问题,但是在这里看起来没有什么意义。在一般情况下,字典现在是[AnyHashable:Any],您应该使用它作为所有类型; AnyObject基本上会慢慢地,但确定地离开。

+0

谢谢!有用 –