swift - ios更新字典,带有以前删除的项

  显示原文与译文双语对照的内容

我有两个字典。两个字典都在一个tmodel中声明,两者都基于一个模型结构类。


//ItemDictionary


var ItemDictionary = ItemModel()


var JSONDictionary = ItemModel()



JSON数据被输入 JSONDictionary,然后这个数据传递给 ItemDictionary,它在中输入一个表。


self.ItemDictionary = self.JSONDictionary



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

我知道这应该是。 如果 Dictionary1 = Dictionary2,则实际上没有创建新字典。 只有第二个地址如果更改 Dictionary1,Dictionary2也会更改。

一个实际的例子是设定价格范围。 你可以缩小范围,并减少表中显示的项目数量。 但是,如果你想增加价格范围,你不能替换以前删除的项目。 我不希望每次编辑范围时都撤回JSON脚本。 推荐建议。

时间: 原作者:

OP确认,ItemModel 是类而不是 Dictionary 。 要修复这个问题,你需要使 ItemModel 成为一个真正的Dictionary,因此是一个值类型。 这可能是首选的选择,但更多的工作。

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

像这样的东西。


init(model: ItemDictionary) -> ItemDictionary {


//copy properties


}



然后创建新副本。

self.ItemDictionary = ItemDictionary(self.JSONDictionary)

稍后你可以使用相同的调用重新初始化 ItemDictionary

试试这个代码-


var dictionary1 = ["name":"Magnus"]


var dictionary2 = dictionary1


dictionary2.removeAll()


print("(dictionary2) (dictionary1)")



输出为:-


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



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

...