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

时间:2017-04-15 13:13:45

标签: swift dictionary swift3

我将文件传送到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'不能与字典文字一起使用

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

1 个答案:

答案 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类型;任何对象基本上都会消失,但很慢但肯定会。