如何将值设置为字典的深度?

Posted

技术标签:

【中文标题】如何将值设置为字典的深度?【英文标题】:How to set value to deep depth of Dictionary? 【发布时间】:2020-07-20 06:47:33 【问题描述】:

我使用 Swift。 我有一个字典变量。 字典看起来像 JSON 结构。 所以,key:value 类型是 [String: AnyObject]。 我想在字典的深处设置一个值。

var dic1: [String: AnyObject] = [String: AnyObject]()

而且,如果打印 dic1,则显示如下。


"a-1": 1,
"a-2": "a-2-1,
"a-3": [
        
            "b-1": "hi",
            "b-2": 10,
            "b-3": [
                
                    "c-1": 100
                ,
                
                    "c-1": 101,
                    "c-2": "aaa"
                ,
            ]
        ,
        
            "b-1": "hello",
            "b-2": 20,
            "b-3": [
                
                    "c-1": 200
                ,
                
                    "c-1": 201,
                    "c-2": "bbb"
                
            ]
            // <- want to set to here
        
    ]

然后,我想为键“b-4”设置一些值。 我尝试如下,但是,xcode 抛出“无法分配给'AnyObject'类型的不可变表达式”错误。

((dic1["a-3"] as? [[String: AnyObject]])?[1] as? [String: AnyObject])?["b-4"] = blahblah as AnyObject

【问题讨论】:

您错误地解决了问题。而不是尝试将 JSON 表示为 [String: AnyObject]。编写一个表示 JSON 的自定义结构/类。然后你可以很容易地设置任何值。 @Sweeper 是的,我知道方法。但我想在不使用自定义结构/类的情况下解决这个问题。只是,解决只使用字典。无论如何,谢谢! 我找到了这个链接。 talk.objc.io/episodes/S01E31-mutating-untyped-dictionaries 所以你找到了自己的答案!随意发布您自己问题的答案:) 【参考方案1】:

错误消息说,您正在尝试更改不可变对象,这是不可能的。因为在 Swift 中,字典是一种值类型。

先获取要修改的对象到一个变量中,修改后赋值回来。像下面这样:

var a3 = (dic1["a-3"] as? [[String: AnyObject]])
a3?[1]["b-4"] = blahblah as AnyObject
dic1["a-3"] = a3 as AnyObject

【讨论】:

以上是关于如何将值设置为字典的深度?的主要内容,如果未能解决你的问题,请参考以下文章

python中 列表导入到字典 出现相同的键,如何将值相加

在字典中,将值从字符串转换为整数

如何在使用while循环时将值附加到字典中的列表?

从字典数组中获取元素并将键保存为字符串,将值保存为字符串

如何使用soap Web服务ios的字典将值存储在数组中

将值附加到字典中的一个列表 将值附加到字典中的所有列表