我尝试在字典中追加值而不替换它,例如:
var dict = [String:Any]()
dict["login"] = ["user" : "jon"]
//...
//...
//...
dict["login"] = ["password": "1234"]
当我第二次尝试为登录添加值时,它会覆盖第一个值。
我该如何追加这些数据呢?
我使用的是Swift 3.
编辑:让我稍微改一下我的问题。 我想构建一个动态字典,我将它作为正文参数发布到alamoFire。所以如果我有一个看起来像这样的JSON:
{
"name" : "Jon",
"details" : {
"occupation" : "lifeguard"
"years_of_ex" : 3
}
"more_details" : "extra info"
"inner_body" : {
"someInfo" : "extra info"
}
... // there might be lots of other fields since it's dynamic
... // the server expect to have missing fields and not empty ones
}
我想动态添加细节,因为我不知道我的词典会是什么样子。 所以将值添加到字典而不覆盖它是我必须的。
答案 0 :(得分:1)
定义一个中间变量并赋值给它:
var dict = [String:Any]()
dict["login"] = ["user" : "jon"]
if var login = dict["login"] as? [String: String] {
login["password"] = "1234"
dict["login"] = login
}
答案 1 :(得分:0)
要反映问题中的编辑:在不知道字典的确切结构的情况下,您无法根据需要进行修改。无论如何,直接修改JSON字典实际上是不好的做法。
将JSON响应解析为自定义对象,根据需要修改对象,然后将对象编码回JSON并将其用作请求的正文。
如果您不想自己编写JSON解析函数,请查看ObjectMapper。它既可以将JSON响应映射到对象,也可以将对象映射到JSON。
答案 2 :(得分:0)
你不能直接"追加"在不知道类型和内容的情况下对dinamic字典的新值。
自
dict["login"]
返回Any?
你无法直接操纵它。
您对每个字典叶的内容可能组合有什么想法吗?
你可以编写一个递归方法,尝试向下转换叶子的内容并以它为基础,尝试做一些事情
switch dict["login"] {
case is [String: Any?]:
// check that the key does not already exist, to not replace it
case is [Int: Any?]:
// Do something else
}