问题标签 [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.
ios - 使用 didSet 通知时的问题
我有一个带有图像的集合视图。每个集合视图项都有图像和与它们相关联的其他数据,例如“grand_total”、“product_id”等。现在每个集合视图项都有一个按钮,当我单击它时,应该存储与之关联的值,例如 grand_total 等在字典数组中。
当我点击另一个集合视图项时,与之相关的值也将存储在字典数组中。因此,最终如果我点击了 2 个集合视图项,则与这 2 个集合视图项相关的所有值都将存储在一个字典数组中,就像这样......
有人建议我使用它,但是在我无法弄清楚的这种情况下,我didSet
将如何使用它。didSet
我对事情不太熟练,因此提出了这个问题......:)
最后,当我发出 API 请求时,字典数组中的所有值都将作为参数传递,如下所示......
在该parameters
部分中,参数order_data
具有值allMyData
并allMyData
应包含[{"remaining_balance":"0.0","shipping_charges":0, "grand_total":320,"product_id":"4"}]
swift - 有没有办法从对象本身调用对象的“didSet”?
我有这个代码:
如何调用child?.updateData()
也可以调用didSet
(因为child?.updateData
更新了孩子的某些部分)?谢谢。
ios - 如何在自定义单元格中使用其他 didSet 变量的首选项?
我有一个 collectionView 的自定义单元格,里面有 3 个 didSet 变量。我的问题是我需要使用每个 didSet 中的 1 个首选项来显示在标签上,但我无法找到这样做的方法。有什么建议么?
现在我想同时使用 pubDate、duration 和 channelName 来显示在标签上,例如:label.text = channelName, duration, pubDate
非常感谢您的帮助!
swift - 在调用 super.init 之前未调用 Swift 变量观察者
好的,所以我正在阅读 willSet/didSet 如何在 swift 中使用,我发现了一个关于 apples swift 文档的注释,这对我来说没有任何意义,我希望有人能解释一下。这是注释:
超类属性的 willSet 和 didSet 观察者在子类初始化器中设置属性时调用,在调用超类初始化器之后。在调用超类初始化程序之前,在类设置自己的属性时不会调用它们。
让我感到困惑的是,他们指出,在 B 对 A 的 super.init 调用之前,不会调用子类 B 中超类 A 属性的观察者。
然而,在那个时候,无论从 A 还是 B 都无法访问该属性,所以无论如何谁会打电话给观察者呢?尝试读/写该属性甚至会导致编译器错误,因此在 Swift 中甚至不可能错误地做到这一点。我是否遗漏了什么,或者这只是指出错误的误导性注释?
swift - didSet 中的循环
在 didSet 中使用循环时,我们遇到了这种奇怪的行为。我们的想法是我们有一个具有树结构的数据类型,并且我们希望在每个元素中存储该项目所在的级别。所以在level
属性的 didSet 中我们还要设置孩子的 level 属性。但是我们意识到,这仅在使用时才有效forEach
,而在使用时无效for .. in
。这里有一个简短的例子:
当我运行它时,我得到以下输出:
从循环调用它时,它似乎不会调用 subItems 属性的 didSet for .. in
。有谁知道为什么会这样?
更新:问题不在于没有从 init 调用 didSet。之后我们更改属性(参见最后 4 行代码),两个深度属性中只有一个会将新值传播给子项
ios - 当你可以改变一个变量并且值无论如何都会改变时,为什么要使用 didSet 呢?
我通读了这个 SO didSet q&a和 Apple's Property Observers以及其他一些帖子。我似乎无法理解的是,在改变变量时使用 didSet 有什么好处,如果你在不使用属性观察器的情况下更改变量,它无论如何都会改变?
场景一:
场景二:
场景 3:
我在场景 3 中看到的唯一一件事是,如果不满足条件,那么 someVal 将不会改变。但是我可以简单地这样做,而不是将它添加到 didSet 中,并且会发生同样的事情。
那么除了在 didSet 观察者中添加条件之外还有什么好处呢?
swift - 为什么更改现有值的成员时会运行属性观察器?
请考虑这个 Swift 代码。我有一个类,它包装了另一个类的实例。当我在持有的值上设置一个属性时,包装类的属性观察器就会运行。
上面代码的输出是:
在 MyWrapperClass didSet
在 MyClass didSet
在 MyWrapperClass didSet
我知道didSet
当变量的值发生变化时会调用它。
因此,当执行“Line1”的上述代码时,我知道打印了“In MyWrapperClass didSet”,这很好。
接下来当 Line2 执行时,我希望正确地打印“In MyClass didSet”,但我不确定为什么会打印“In MyWrapperClass didSet”,因为属性myValue
没有改变。有人可以解释为什么吗?
swift - Swift willSet/didSet 赋值?
我想通过使用didSet
/ willSet
API 来观察类中几个属性的变化。但是我想保持我的属性声明部分干净,所以我想有单独的函数来实现这个逻辑。
现在我有这样的事情:
然而,这需要 5 行,如果你有更多这样的属性,这相当多。如果我可以将其限制为 3,那就太好了,例如:
Swift 中有没有办法将函数/闭包分配给属性观察者?
ios - 为什么我们可以从 didSet 属性观察者返回
当我在 didSet 中创建递归时,实际上我发现我可以放一个 return 并且程序从 didSet 退出。但是我没有找到任何地方(我搜索了很长时间)我可以输入一个返回词来退出 didSet。那么,didSet 是否像计算属性一样工作,我们可以在其中返回值?如果有人知道任何事情,我将不胜感激。谢谢你。