问题标签 [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.

0 投票
3 回答
10527 浏览

swift - 在 Swift 中,重置 didSet 中的属性会触发另一个 didSet 吗?

我正在对此进行测试,看来如果您更改 内的值didSet,则不会再次调用didSet.

我可以依靠这个吗?它是否记录在某处?我在Swift Programming Language文档中没有看到它。

0 投票
4 回答
6469 浏览

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"这个错误是什么意思?

在此处输入图像描述

非常感谢。

0 投票
1 回答
301 浏览

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反向调用了。这有点酷,但是这种行为记录在哪里?像这样的测试是学习它的唯一方法吗?

0 投票
1 回答
577 浏览

ios - 在 Swift 中观察 ObjC 类的属性

我正在使用一个第三方库,我有一个 ObjC 头文件。在这个头文件中,有一个我想从我的 Swift 代码中观察到的属性。我现在的问题是:我可以在没有 .m 文件的情况下以某种方式扩展 ObjC 类,以便在 Swift 中更改属性时可以观察到属性?我想过使用 KVO,但是我需要更改 ObjC 类的实现?

谢谢你的帮助

0 投票
1 回答
84 浏览

ios - 更改观察对象中的变量时如何防止调用 Swift Propertyobservers

在测试时我发现了这种奇怪的行为:

此代码将始终导致viewModel.delegate成为视图。

有什么办法可以防止这种情况发生吗?

0 投票
1 回答
86 浏览

swift3 - 斯威夫特的财产监督者不会在级联中被调用

假设我有一个像这样的简单树状结构:

树的每个节点都保留对其子节点的引用,以及对最老祖先的弱节点(以避免引用循环)。

每当我在其根上设置子树时,我想自动更新子树所有节点的祖先属性。

我尝试使用属性观察器来实现这一点,只要设置了它的祖先,就在节点的子节点上进行迭代,以便传播该值,但注意到既没有didSet也没有willSet被调用传递第一个孩子。这是我一直在使用的代码:

正如预期的那样, 的祖先grandParent被正确设置, 的也是如此parent。但是,它的后代 (childgrandChild) 不是。请注意,我一直在观察相同的结果willSet(当然调整上面的代码以考虑到self.ancestor尚未改变的情况)。

有人可以指出我在这里缺少什么吗?


我可以用非常相似的方法对计算属性做我想做的事。但我发现它没有财产观察者那么优雅,如果可能的话,我宁愿避免它。然而,这个片段可以完成任务。

0 投票
2 回答
2346 浏览

arrays - 如何使用属性观察器观察具有 Swift 集合类型的特定元素?

在回答我如何知道数组中元素的值是否已更改?, 答案是使用Property Observer来检查数组是否已被修改。

但是,如何确定属性观察器中集合类型中的更新元素是什么?例如:

请注意,didSet每个添加、更新或删除操作都调用了代码,但我如何才能准确知道受影响的元素是什么?有没有办法通过将strings数组标记为Property Observer来实现这一点?

我在询问 Swift 中的所有集合类型,因为我认为它们应该是相同的行为,它是关于观察的。

谢谢。

0 投票
1 回答
586 浏览

swift - 内部 didSet 保护奇怪地延伸到整个类?

众所周知,当然,didSet 不会再次从 didSet 内部在同一个对象上运行。(例如。)

然而。似乎:限制不仅适用于该对象,而且可能适用于同一类的任何对象

这是 Playground 的复制粘贴测试用例。

不工作!

不工作!

  1. 这是一个 Swift 错误吗?

  2. 如果没有,实际的限制是什么?它不会运行从 didSet 开始的任何 didSet(无论如何)?同一个班级?;同一个超级班?或者?

  3. 这在doco中到底是在哪里解释的?

哇。需要知道......具体的实际限制是什么?

0 投票
2 回答
1506 浏览

swift - Mutable 和 Modifialbe 它们是什么意思?

让我们从一些代码段开始

很长一段时间,我对 mutable、modifiable 的含义感到很困惑。到目前为止,这是我的一些理解,如果您能指出它可能存在的所有错误,那就太好了

  1. 上述结构类型中的变异函数不会“变异”实例,它会将变量的旧值替换为全新的值

  2. 变异意味着:赋值,初始化或变异函数等动作不会修改当前值,而是触发替换

  3. 类类型变量的值是不可变的,但您可以修改/更改当前值(这是编译器发出警告的原因,请参阅带 # 的注释)

  4. setter 观察者,只能在类型是值类型时调用,因为 setter 告诉变量是否已被变异/替换(请参见下面的代码)

    /li>

感谢您的时间和帮助

0 投票
2 回答
118 浏览

swift - 为什么“=”赋值运算符在我的 didSet 属性观察器的 if 语句中不起作用?