使用以前删除的项目更新字典

时间:2016-04-05 20:09:45

标签: ios swift dictionary

我有两本词典。两者都在viewController中声明,都基于模型结构类。

// ItemDictionary
var ItemDictionary = ItemModel()
var JSONDictionary = ItemModel()

将JSON数据输入JSONDictionary,然后将此数据传递给ItemDictionary,后者在ViewDidLoad中提供表。

self.ItemDictionary = self.JSONDictionary

一切都好。该表很好地填充了JSON数据。我也可以从表格和ItemDictionary中删除项目。但是,当我尝试通过引用原始字典(JSONDictionary)添加项目时,该项目已经消失。

我理解这是预期的。如果Dictionary1 = Dictionary2,则实际上不会创建新字典。只有第二个地址。因此,如果您更改Dictionary1,Dictionary2也会更改。

一个实际的例子可能是设定价格范围。您可以缩小范围并减少表格中显示的项目。但是,如果要增加价格范围,则无法替换以前删除的项目。每次编辑范围时,我都不想回忆起JSON脚本。建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

尝试使用此代码 -

var dictionary1 = ["name": "Magnus"]
var dictionary2 = dictionary1
dictionary2.removeAll()
print("\(dictionary2) \(dictionary1)")

输出结果为: -

[:] ["name": "Magnus"]

因此正在创建2个新词典。如果您参考Swift文档,您会发现在swift中,引用几乎不存在。 代码的其他部分可能是负责任的。希望这会有所帮助: - )

答案 1 :(得分:0)

正如OP所确认的那样,ItemModel是一个类而不是Dictionary。要解决此问题,您需要将ItemModel设为真Dictionary,从而使其成为值类型。这可能是首选,但会有更多的工作。

另一种方法是向ItemModel类添加一个便利初始化程序,该类实例化自身的新副本并调用它而不是设置self.ItemDictionary = self.JSONDictionary

像这样。

init(model: ItemDictionary) -> ItemDictionary {
   // copy properties
}

然后创建新副本。

self.ItemDictionary = ItemDictionary(self.JSONDictionary)

稍后您可以使用相同的电话重新初始化ItemDictionary