// ItemDictionary
var ItemDictionary = ItemModel()
var JSONDictionary = ItemModel()
将JSON数据输入JSONDictionary,然后将此数据传递给ItemDictionary,后者在ViewDidLoad中提供表。
self.ItemDictionary = self.JSONDictionary
一切都好。该表很好地填充了JSON数据。我也可以从表格和ItemDictionary中删除项目。但是,当我尝试通过引用原始字典(JSONDictionary)添加项目时,该项目已经消失。
我理解这是预期的。如果Dictionary1 = Dictionary2,则实际上不会创建新字典。只有第二个地址。因此,如果您更改Dictionary1,Dictionary2也会更改。
一个实际的例子可能是设定价格范围。您可以缩小范围并减少表格中显示的项目。但是,如果要增加价格范围,则无法替换以前删除的项目。每次编辑范围时,我都不想回忆起JSON脚本。建议表示赞赏。
答案 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
。