首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用以前删除的项更新字典

用以前删除的项更新字典
EN

Stack Overflow用户
提问于 2016-04-05 20:09:44
回答 2查看 59关注 0票数 0

我有两本字典。它们都是在viewController中声明的,都是基于模型结构类的。

代码语言:javascript
运行
复制
// ItemDictionary
var ItemDictionary = ItemModel()
var JSONDictionary = ItemModel()

JSON数据被输入到JSONDictionary中,然后将这些数据传递给ItemDictionary,后者在ViewDidLoad中提供一个表。

代码语言:javascript
运行
复制
self.ItemDictionary = self.JSONDictionary

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

我知道这是意料之中的。如果Dictionary1 = Dictionary2,则不会实际创建新字典。只有第二个地址。因此,如果您更改Dictionary1,Dictionary2也会改变。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-05 20:49:58

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

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

就像这样。

代码语言:javascript
运行
复制
init(model: ItemDictionary) -> ItemDictionary {
   // copy properties
}

然后创建新副本。

self.ItemDictionary = ItemDictionary(self.JSONDictionary)

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

票数 0
EN

Stack Overflow用户

发布于 2016-04-05 20:23:52

试试这段代码-

代码语言:javascript
运行
复制
var dictionary1 = ["name": "Magnus"]
var dictionary2 = dictionary1
dictionary2.removeAll()
print("\(dictionary2) \(dictionary1)")

产出如下:

代码语言:javascript
运行
复制
[:] ["name": "Magnus"]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36436077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档