问题标签 [didset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
56 浏览

ios - 使用 didSet 通知时的问题

我有一个带有图像的集合视图。每个集合视图项都有图像和与它们相关联的其他数据,例如“grand_total”、“product_id”等。现在每个集合视图项都有一个按钮,当我单击它时,应该存储与之关联的值,例如 grand_total 等在字典数组中。

当我点击另一个集合视图项时,与之相关的值也将存储在字典数组中。因此,最终如果我点击了 2 个集合视图项,则与这 2 个集合视图项相关的所有值都将存储在一个字典数组中,就像这样......

有人建议我使用它,但是在我无法弄清楚的这种情况下,我didSet将如何使用它。didSet我对事情不太熟练,因此提出了这个问题......:)

最后,当我发出 API 请求时,字典数组中的所有值都将作为参数传递,如下所示......

在该parameters部分中,参数order_data具有值allMyDataallMyData应包含[{"remaining_balance":"0.0","shipping_charges":0, "grand_total":320,"product_id":"4"}]

0 投票
1 回答
400 浏览

swift - 有没有办法从对象本身调用对象的“didSet”?

我有这个代码:

如何调用child?.updateData()也可以调用didSet(因为child?.updateData更新了孩子的某些部分)?谢谢。

0 投票
1 回答
173 浏览

ios - 如何在自定义单元格中使用其他 didSet 变量的首选项?

我有一个 collectionView 的自定义单元格,里面有 3 个 didSet 变量。我的问题是我需要使用每个 didSet 中的 1 个首选项来显示在标签上,但我无法找到这样做的方法。有什么建议么?

现在我想同时使用 pubDate、duration 和 channelName 来显示在标签上,例如:label.text = channelName, duration, pubDate

非常感谢您的帮助!

0 投票
1 回答
213 浏览

swift - 在调用 super.init 之前未调用 Swift 变量观察者

好的,所以我正在阅读 willSet/didSet 如何在 swift 中使用,我发现了一个关于 apples swift 文档的注释,这对我来说没有任何意义,我希望有人能解释一下。这是注释:

超类属性的 willSet 和 didSet 观察者在子类初始化器中设置属性时调用,在调用超类初始化器之后。在调用超类初始化程序之前,在类设置自己的属性时不会调用它们。

来自:https ://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

让我感到困惑的是,他们指出,在 B 对 A 的 super.init 调用之前,不会调用子类 B 中超类 A 属性的观察者。

然而,在那个时候,无论从 A 还是 B 都无法访问该属性,所以无论如何谁会打电话给观察者呢?尝试读/写该属性甚至会导致编译器错误,因此在 Swift 中甚至不可能错误地做到这一点。我是否遗漏了什么,或者这只是指出错误的误导性注释?

0 投票
2 回答
521 浏览

swift - didSet 中的循环

在 didSet 中使用循环时,我们遇到了这种奇怪的行为。我们的想法是我们有一个具有树结构的数据类型,并且我们希望在每个元素中存储该项目所在的级别。所以在level属性的 didSet 中我们还要设置孩子的 level 属性。但是我们意识到,这仅在使用时才有效forEach,而在使用时无效for .. in。这里有一个简短的例子:

当我运行它时,我得到以下输出:

从循环调用它时,它似乎不会调用 subItems 属性的 didSet for .. in。有谁知道为什么会这样?

更新:问题不在于没有从 init 调用 didSet。之后我们更改属性(参见最后 4 行代码),两个深度属性中只有一个会将新值传播给子项

0 投票
3 回答
850 浏览

ios - 当你可以改变一个变量并且值无论如何都会改变时,为什么要使用 didSet 呢?

我通读了这个 SO didSet q&a和 Apple's Property Observers以及其他一些帖子。我似乎无法理解的是,在改变变量时使用 didSet 有什么好处,如果你在不使用属性观察器的情况下更改变量,它无论如何都会改变?

场景一:

场景二:

场景 3:

我在场景 3 中看到的唯一一件事是,如果不满足条件,那么 someVal 将不会改变。但是我可以简单地这样做,而不是将它添加到 didSet 中,并且会发生同样的事情。

那么除了在 didSet 观察者中添加条件之外还有什么好处呢?

0 投票
3 回答
456 浏览

swift - 为什么更改现有值的成员时会运行属性观察器?

请考虑这个 Swift 代码。我有一个类,它包装了另一个类的实例。当我在持有的值上设置一个属性时,包装类的属性观察器就会运行。

上面代码的输出是:

在 MyWrapperClass didSet
在 MyClass didSet
在 MyWrapperClass didSet

我知道didSet当变量的值发生变化时会调用它。

因此,当执行“Line1”的上述代码时,我知道打印了“In MyWrapperClass didSet”,这很好。

接下来当 Line2 执行时,我希望正确地打印“In MyClass didSet”,但我不确定为什么会打印“In MyWrapperClass didSet”,因为属性myValue没有改变。有人可以解释为什么吗?

0 投票
0 回答
219 浏览

ios - 在初始化变量时使用 didSet

我有一个数组results,用于设置另一个数组filteredResult,其中包含主results数组的一些过滤值。

filteredResult现在,在设置此数组后,我将不得不执行一些任务。那么在哪里执行该任务呢?我试过didSet了,get但我得到了错误

DidSet 变量可能没有 get 说明符

我已经检查了这个这个链接。但无法得到解决方案。

因此,请帮助我了解如何在filteredResult设置了一些过滤器值后执行某些任务。

0 投票
1 回答
251 浏览

swift - Swift willSet/didSet 赋值?

我想通过使用didSet/ willSetAPI 来观察类中几个属性的变化。但是我想保持我的属性声明部分干净,所以我想有单独的函数来实现这个逻辑。

现在我有这样的事情:

然而,这需要 5 行,如果你有更多这样的属性,这相当多。如果我可以将其限制为 3,那就太好了,例如:

Swift 中有没有办法将函数/闭包分配给属性观察者?

0 投票
3 回答
795 浏览

ios - 为什么我们可以从 didSet 属性观察者返回

当我在 didSet 中创建递归时,实际上我发现我可以放一个 return 并且程序从 didSet 退出。但是我没有找到任何地方(我搜索了很长时间)我可以输入一个返回词来退出 didSet。那么,didSet 是否像计算属性一样工作,我们可以在其中返回值?如果有人知道任何事情,我将不胜感激。谢谢你。