问题标签 [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.
swift - Swift 中 willSet 和 didSet 的作用是什么?
Swift 的属性声明语法与 C# 非常相似:
但是,它也有willSet
和didSet
动作。它们分别在调用 setter 之前和之后调用。考虑到您可以在 setter 中使用相同的代码,他们的目的是什么?
swift - 在 Swift 中动态设置 willSet 和 didSet
willSet
我看到了使用&didSet
来替换我在 Objective-C 中使用的部分 KVO 类型代码的潜力。Objective-C 的好处之一是它的活力,特别是在运行时创建行为的能力。为了让willSet
&didSet
对我有用,我需要能够动态分配他们的行为。是否可以设置它们的“内容”或它们动态体现的行为?一个用例是将模型的属性绑定到视图。在伪代码中:
ios - 是否可以允许在 Swift 初始化期间调用 didSet?
问题
苹果的文档指定:
首次初始化属性时不会调用 willSet 和 didSet 观察者。仅当属性的值在初始化上下文之外设置时才调用它们。
是否可以在初始化期间强制调用这些?
为什么?
假设我有这门课
我创建了 method doStuff
,以使处理调用更简洁,但我宁愿只处理didSet
函数中的属性。有没有办法在初始化期间强制调用它?
更新
我决定只删除我的类的便利初始化程序,并强制您在初始化后设置属性。这让我知道didSet
将永远被调用。我还没有决定这是否总体上更好,但它很适合我的情况。
class - 结构和类 didSet 过程的行为不同
我已将此作为雷达报告提交,但我不确定他们会做什么。
我拥有的是一个结构,该结构由类实例实例化和聚合。
由于 struct 是一个对象,因此它具有 setter 和 getter,以及 set/get 观察者。
我正在使用这些观察者重新索引结构实例的数组。
交易是,一个结构有一个“可见”标志(在我的实现中)。如果该标志被关闭(设置为 false),则容器类需要重新索引其所有结构,以从索引中删除现在不可见(或现在可见)的实例。
所以,最好的方法是,当我实例化一个结构实例时,我将一个对容器实例的引用传递给它,并设置一个 didSet { myContainer.reIndex() } 处理程序。
问题是结构和类的行为似乎不同。我怀疑这是一个价值/参考问题。
在一个类中,实例的外部值是在调用 didSet 时设置的。这意味着我可以调用一个外部对象来重新索引,它会看到新的值。
在结构中,直到执行 didSet 之后才出现这种情况。
我将在 RADAR 报告中包含我提交的游乐场。
我的问题是:你认为结构应该有 setter/getter 观察者吗?他们应该有setter/getter吗?
我确实有一个解决方法。我在更改值后调用索引器。它只是没有那么优雅。
操场(在下面的代码中,查看在 didSet 处理程序期间发出的不同值):
swift - Swift:如何在不调用其 didSet 函数的情况下更改属性的值
如何在 Swift 中设置属性的值,而不didSet()
在初始化上下文之外调用它的函数?noside()
下面的代码是在类的功能中实现这一目标的失败实验
在具有自动合成属性的 Objective-C 中执行此操作非常简单:
有副作用(如果存在于 setter 中):
无副作用:
swift - 属性观察者 willSet 和 didSet;属性获取器和设置器
在属性中使用 this 时willSet
-didSet
和get
-有什么区别?set
从我的角度来看,它们都可以为属性设置值。什么时候,为什么,我应该使用willSet
- didSet
,什么时候get
- set
?
我知道对于willSet
and didSet
,结构如下所示:
arrays - 为什么不能在属性观察者 didSet 中更改 Swift 数组?
看来 Swift 的 Array 不会通过 didSet,为什么?
xcode - Swift didSet 抛出错误
我得到以下代码:
显示的错误是:
计算属性必须具有显式类型
我不明白这个错误。我是初学者。有什么帮助吗?
编辑:更多代码
声明很简单,其余代码在 tableView 上,但没有给出任何错误,只是字符串
编辑 2:更多代码
这是配置视图。也许它有帮助。
swift - Why is this didSet property not printing any output in Swift?
I have correctly set up a UIPageViewController.
I would like to check the itemIndex of each views and display content accordingly. Here's what the code looks like:
What I tried
- I run the app
- Console Output: "Character is John!"
- I swipe forward (to the right)
- Console Output: "Character is Lela!"
- I swipe back (to the left)
- There is no output!
- I swipe forward
- There is no output! Again!
What is this due to? Here's the full code:
swift - Swift:覆盖 didSet 会导致递归
当重写属性的 didSet 观察者导致递归时,为什么?
如果我QuadInt
更新
所以我猜这个电话是这样的:
这或多或少有点像在黑暗中拍摄。是否有任何文件说明属性更新时会发生什么?