我将文件传送到Swift3,一个字典就像
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 :(得分:3)
写[String:Any]
而不是[String:AnyObject]
,你会没事的。
至于“发生了什么”:自动桥接消失了(例如在Int和NSNumber之间,或String和NSString)。因此,像["imageName":"3setting"]
这样的字面词典被推断为[String:String]
,并且无法在预期[String:AnyObject]
的位置分配 - 因为String 不是AnyObject。但是String肯定是Any,因为所有都是Any。
您可以通过编写["number":1 as NSNumber, "imageName":"3setting" as NSString]
来解决此问题(因为NSNumber或NSString 是是AnyObject),但这样做似乎没什么意义。在一般情况下,字典现在是[AnyHashable:Any]
,你应该使用它作为catch-all类型;任何对象基本上都会消失,但很慢但肯定会。