问题标签 [property-observer]
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.
swift - 在 Swift 中,重置 didSet 中的属性会触发另一个 didSet 吗?
我正在对此进行测试,看来如果您更改 内的值didSet
,则不会再次调用didSet
.
我可以依靠这个吗?它是否记录在某处?我在Swift Programming Language文档中没有看到它。
swift - 是什么让属性成为 Swift 中的计算属性
让我们从代码片段开始:
以下是我个人对存储和计算属性的一些理解:
a:只有观察者的属性(willSet 和 didSet)不是计算属性,而是存储属性(例如上面代码中的proA属性)。
b:计算属性不能有初始化(见上面代码的注释)。
c: setter 相当于属性观察者,属性观察者只是变异前后的 setter + 观察者。
问题:
1.我想知道是什么让属性成为计算属性?只要属性有一个getter并返回它是一个计算属性,这是否正确?
2.我所有的理解(a、b 和 c)都正确吗?如果没有,请您指出。
3.为什么不允许初始化计算属性?(请看下图) 当我这样做时,编译器会发出警告Cannot call value of none-function type "int"这个错误是什么意思?
非常感谢。
swift - 混合 Swift 属性观察者和继承
我一直在修改这个,我想知道是否有任何关于这个主题的文献,或者任何知道预期行为的方式。这是一个例子:
当它运行时,我得到这个输出:
Class C willSet on paused called
Class B willSet on paused called
Class A willSet on paused called
Class A didSet on paused called
Class B didSet on paused called
Class C didSet on paused called
似乎willSet
以通常的多态方式调用了,但是didSet
反向调用了。这有点酷,但是这种行为记录在哪里?像这样的测试是学习它的唯一方法吗?
ios - 在 Swift 中观察 ObjC 类的属性
我正在使用一个第三方库,我有一个 ObjC 头文件。在这个头文件中,有一个我想从我的 Swift 代码中观察到的属性。我现在的问题是:我可以在没有 .m 文件的情况下以某种方式扩展 ObjC 类,以便在 Swift 中更改属性时可以观察到属性?我想过使用 KVO,但是我需要更改 ObjC 类的实现?
谢谢你的帮助
ios - 更改观察对象中的变量时如何防止调用 Swift Propertyobservers
在测试时我发现了这种奇怪的行为:
此代码将始终导致viewModel.delegate
成为视图。
有什么办法可以防止这种情况发生吗?
swift3 - 斯威夫特的财产监督者不会在级联中被调用
假设我有一个像这样的简单树状结构:
树的每个节点都保留对其子节点的引用,以及对最老祖先的弱节点(以避免引用循环)。
每当我在其根上设置子树时,我想自动更新子树所有节点的祖先属性。
我尝试使用属性观察器来实现这一点,只要设置了它的祖先,就在节点的子节点上进行迭代,以便传播该值,但注意到既没有didSet
也没有willSet
被调用传递第一个孩子。这是我一直在使用的代码:
正如预期的那样, 的祖先grandParent
被正确设置, 的也是如此parent
。但是,它的后代 (child
和grandChild
) 不是。请注意,我一直在观察相同的结果willSet
(当然调整上面的代码以考虑到self.ancestor
尚未改变的情况)。
有人可以指出我在这里缺少什么吗?
我可以用非常相似的方法对计算属性做我想做的事。但我发现它没有财产观察者那么优雅,如果可能的话,我宁愿避免它。然而,这个片段可以完成任务。
arrays - 如何使用属性观察器观察具有 Swift 集合类型的特定元素?
在回答我如何知道数组中元素的值是否已更改?, 答案是使用Property Observer来检查数组是否已被修改。
但是,如何确定属性观察器中集合类型中的更新元素是什么?例如:
请注意,didSet
每个添加、更新或删除操作都调用了代码,但我如何才能准确知道受影响的元素是什么?有没有办法通过将strings
数组标记为Property Observer来实现这一点?
我在询问 Swift 中的所有集合类型,因为我认为它们应该是相同的行为,它是关于观察的。
谢谢。
swift - 内部 didSet 保护奇怪地延伸到整个类?
众所周知,当然,didSet 不会再次从 didSet 内部在同一个对象上运行。(例如。)
然而。似乎:限制不仅适用于该对象,而且可能适用于同一类的任何对象。
这是 Playground 的复制粘贴测试用例。
不工作!
不工作!
这是一个 Swift 错误吗?
如果没有,实际的限制是什么?它不会运行从 didSet 开始的任何 didSet(无论如何)?同一个班级?;同一个超级班?或者?
这在doco中到底是在哪里解释的?
哇。需要知道......具体的实际限制是什么?
swift - Mutable 和 Modifialbe 它们是什么意思?
让我们从一些代码段开始
很长一段时间,我对 mutable、modifiable 的含义感到很困惑。到目前为止,这是我的一些理解,如果您能指出它可能存在的所有错误,那就太好了
上述结构类型中的变异函数不会“变异”实例,它会将变量的旧值替换为全新的值
变异意味着:赋值,初始化或变异函数等动作不会修改当前值,而是触发替换
类类型变量的值是不可变的,但您可以修改/更改当前值(这是编译器发出警告的原因,请参阅带 # 的注释)
setter 观察者,只能在类型是值类型时调用,因为 setter 告诉变量是否已被变异/替换(请参见下面的代码)
/li>
感谢您的时间和帮助