【问题标题】:Swift3, How to add AnyObject in a dictionary?Swift3,如何在字典中添加 AnyObject?
【发布时间】:2017-04-15 13:13:44
【问题描述】:

我将文件转换为 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”不能与字典文字一起使用

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

【问题讨论】:

  • 如果你的内部字典有静态键,那么你应该将它们建模为structs。此外,如果您的外部字典的键应该只是整数,那么将它们改为Ints - 如果它们是连续的,那么您最好使用数组来代替。总的来说,你可能想要一个[[SomeStruct]]

标签: swift dictionary swift3


【解决方案1】:

[String:Any] 而不是[String:AnyObject],你会没事的。

至于“发生了什么”:自动桥接消失了(例如在 Int 和 NSNumber 之间,或 String 和 NSString 之间)。所以像["imageName":"3setting"] 这样的字面字典被推断为[String:String],并且不能分配到预期[String:AnyObject] 的位置——因为String 不是 AnyObject。但 String 肯定是 Any,因为 everything 是 Any。

您也可以通过编写["number":1 as NSNumber, "imageName":"3setting" as NSString] 来解决此问题(因为 NSNumber 或 NSString AnyObject),但在这里这样做似乎没什么意义。在一般情况下,字典现在是[AnyHashable:Any],您应该使用它作为包罗万象的类型; AnyObject 基本上会慢慢消失,但肯定会消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多