如何将值设置为字典的深度?
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
【讨论】:
以上是关于如何将值设置为字典的深度?的主要内容,如果未能解决你的问题,请参考以下文章