我有一个字典 - > var dictionary = [String : [String]]()
,我想在字典数组中追加字符串值 . 这就是我的做法
for (key, value) in dictionary {
dictionary.updateValue(value.append(nameText),forKey: "name")
}
这里, nameText
是一个字符串,我收到一个错误说,
不能对不可变值使用变异成员:'value'是'let'常量 .
我究竟做错了什么?非常感谢帮助 .
4 回答
你的第一个问题是
value
是循环体内的let
常量 . 您必须将其声明为var
才能使其变异 .您的第二个问题是您尝试使用
value.append(nameText)
作为为密钥设置的值 . 但是,append()
将数组变异,并返回Void
.第三,不要使用
updateValue(forKey:)
. 真的没有意义 . 请改用下标 .现在,这会让您的代码进行编译,但是我会在每次迭代时覆盖
"name"
键的值,这意味着只有最后一次迭代的值会持续存在 . 此外,因为Dictionary
没有定义的顺序,所以此代码具有不确定的行为 . 你究竟想做什么?试试这个:
想想它一秒钟;
value.append(nameText)
是 action . 它返回Void
(类型为......什么都没有!) .您想要将值更新为 upon which an action has been performed .
而不是手动制作临时副本,修改它,然后使用它来更新某些键的值,您可以简单地使用下标和扩展:
你想要的是:
因此,对于名为
dictionary
的字典:具体来说,
dictionary[forceUnwrapping: key].append(nameText)
.但是,如下面的问答所述
...,很好地意识到“就地”变异的开销,特别是如果工作性能紧张的应用程序 . 从上面的链接线程中的答案中得到建议,可以采用另一种更明智,更少复制浪费的方法: