我有两本字典。它们都是在viewController中声明的,都是基于模型结构类的。
// ItemDictionary
var ItemDictionary = ItemModel()
var JSONDictionary = ItemModel()JSON数据被输入到JSONDictionary中,然后将这些数据传递给ItemDictionary,后者在ViewDidLoad中提供一个表。
self.ItemDictionary = self.JSONDictionary一切都很好。该表由JSON数据很好地填充。我还可以从表和ItemDictionary中删除项。但是,当我试图通过引用原始字典(JSONDictionary)将项目添加回来时,项目已经消失了。
我知道这是意料之中的。如果Dictionary1 = Dictionary2,则不会实际创建新字典。只有第二个地址。因此,如果您更改Dictionary1,Dictionary2也会改变。
一个实际的例子可以是设定一个价格范围。您可以缩小范围,并在表上显示较少的项。但是,如果您想要增加价格范围,则不能替换先前删除的项目。每次编辑范围时,我都不想回忆JSON脚本。谢谢你的建议。
发布于 2016-04-05 20:49:58
正如OP所确认的那样,ItemModel是一个类,而不是Dictionary。要解决这个问题,您需要使ItemModel成为一个真正的Dictionary,从而成为一个值类型。这可能是首选的选择,但将是更多的工作。
另一种方法是向ItemModel类添加一个方便的初始化器,该类实例化自身的一个新副本并调用该副本,而不是设置self.ItemDictionary = self.JSONDictionary。
就像这样。
init(model: ItemDictionary) -> ItemDictionary {
   // copy properties
}然后创建新副本。
self.ItemDictionary = ItemDictionary(self.JSONDictionary)
稍后,您可以使用相同的调用重新初始化ItemDictionary。
发布于 2016-04-05 20:23:52
试试这段代码-
var dictionary1 = ["name": "Magnus"]
var dictionary2 = dictionary1
dictionary2.removeAll()
print("\(dictionary2) \(dictionary1)")产出如下:
[:] ["name": "Magnus"]因此,正在创建两个新的词典。如果您参考swift文档,您会发现在Swift中,几乎没有引用。代码的其他部分可能要负责。希望这会有所帮助:)
https://stackoverflow.com/questions/36436077
复制相似问题