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”不能用字典字面
使用
但为什么现在不工作? 为什么会发生这种情况,以及如何解决它?
答
写[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
谢谢!有用 –
如果你的内部字典有静态键,那么你应该将它们建模为'struct's。另外,如果你的外部字典的键只能是整数,那么就让它们成为'Int' - 如果它们是连续的,那么你最好使用数组来代替。总的来说,你可能需要'[[SomeStruct]]'。 – Hamish