问题标签 [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 投票
0 回答
1055 浏览

swift - 使用 didSet 和长手语法 () 时,计算属性必须具有显式类型

这很好:

这会产生构建错误Computed property must have an explicit type

使用速记形式将推断出的字符串数组类型Array<String>()与? 结合起来的正确语法是didSet什么?

0 投票
3 回答
2133 浏览

swift - 在 Swift 中实现变量属性属性观察器

我想实现didSet一个变量的“子属性”。

例子:

我想在myLabel.hidden属性更改时隐藏/显示其他一些视图。我该怎么做?

0 投票
1 回答
1892 浏览

swift - 为什么 didSet 中没有无限循环?

在我的 FirstViewController 中,我有一个指向我的 SecondViewController 的按钮,将数据传递给 SecondViewController 中的一个属性。该属性有一个属性观察者,在设置时会创建一个 SecondViewController 的新实例。

虽然它按我的意愿工作,但我想知道为什么它没有陷入无限循环,永远创建 SecondViewController 的实例。这样做是个好习惯吗?

第一视图控制器:

第二视图控制器:

0 投票
1 回答
4028 浏览

swift - 在更改类中的属性时,有没有办法让 didSet 工作?

我有一个带有属性观察者的类作为属性。如果我更改了该类中的某些内容,是否可以触发 didSet,如示例所示:

0 投票
2 回答
1589 浏览

ios - 在 UITableViewCell 中使用属性观察器设置标签,发生了什么

在我的习惯UITableViewCell设置属性时,如果没有标签,它将创建一个标签并设置文本等。如果标签已经存在,它不应该做任何事情。奇怪的是,当我第一次点击单元格时,它会创建应有的标签。但是当我再次点击单元格时,标签消失了。我已经在一个干净的项目中重新创建了它,并且正在发生同样的事情。这种奇怪行为的原因是什么?

自定义表视图单元:

视图控制器:

编辑:作为对评论的回应,我的控制台显示:

我还将背景更改为一种颜色,它就消失了。我想这与oldValuedidSet 的有关。当willSet我将值更改为newValue. 但是,当我使用“旧值”时,什么都没有发生。

0 投票
3 回答
13450 浏览

swift - 覆盖属性观察者

当我覆盖该函数noise时,该函数将被新函数替换。但是当我用观察者覆盖一个属性时,旧值和新值都会被执行。

在操场上:

输出:

但是当我对观察者的财产做同样的事情时:

在操场上:

输出:

那么我应该如何用观察者覆盖属性以及如何防止旧值也被执行?

0 投票
3 回答
8816 浏览

arrays - 在 Swift 数组上使用 didSet 和 private(set)

我正在做一个快速的项目,我有几个数组。在我的一个数组中,我不希望客户端能够在不使用我特别定义的方法之一的情况下对其进行变异。另一方面,我希望 getter 可以访问。我的问题是关于附加和设置属性。

问题1:是否会private(set)阻止客户致电array.append

在另一个阵列上,我想看看它是否已更改。

问题 2:如果我使用 将属性观察器添加到数组中didSet,那么didSet在将元素附加到数组时会调用它吗?

0 投票
1 回答
807 浏览

swift - willset 和 didset 在 Swift 中被认为是闭包吗?

我了解其目的,willsetdidset我不确定它们是否被视为关闭。

如果它们是闭包,那么下面的代码不应该产生一个强引用循环吗?

0 投票
2 回答
134 浏览

ios - 将 willSet 块分配给 iOS isResting 属性

我想willSet为属性设置一个声明isResting。每当isResting更改时,都会调用一些函数。这就是我的意思:

这是行不通的。您可以将 willSet 或 didSet 分配给已定义的 iOS 属性吗?如果没有,我如何获得类似的效果?

这是文档:

https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SceneKit_Framework/index.html#//apple_ref/doc/uid/TP40012283

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNPhysicsBody_Class/index.html#//apple_ref/occ/instp/SCNPhysicsBody/isResting

0 投票
5 回答
8697 浏览

ios - 如果我想给自己分配一个属性怎么办?

如果我尝试运行以下代码:

我得到错误:

将属性分配给自身。


我想将属性分配给自身以强制photographer didSet块运行。

这是一个真实的例子:在2013 年冬季斯坦福 iOS 课程(13:20)的“16. Segues and Text Fields”讲座中,教授建议编写类似于以下的代码:

注意:我做了以下更改:(1)代码从Objective-C切换到Swift;(2)因为是Swift,所以我用didSet属性的块代替了setPhotographer:方法;(3) 而不是self.view.window我正在使用isViewLoaded,因为前者错误地强制视图在访问该view属性时加载;(4)reload()为简单起见,该方法(仅)更新标签,因为它更接近于我的代码;(5) 添加了摄影师IBOutlet标签以支持这个更简单的代码;(6) 由于我使用的是 Swift,因此isViewLoaded()出于性能原因检查不再存在,现在需要防止崩溃,因为 IBOutlet 被定义为UILabel!而不是UILabel?因此在加载视图之前尝试访问它会使应用程序崩溃;这在 Objective-C 中不是强制性的,因为它使用空对象模式。

我们调用 reload 两次的原因是因为我们不知道该属性是在视图创建之前还是之后设置。例如,用户可能首先设置属性,然后呈现视图控制器,或者他们可能呈现视图控制器,然后更新属性。

我喜欢这个属性如何与视图加载时间无关(最好不要对视图加载时间做任何假设),所以我想在我自己的代码中使用相同的模式(仅稍作修改):

这里不是创建要从两个地方调用的新方法,我只想要didSet块中的代码。我想viewDidLoad强制didSet调用,所以我将属性分配给它自己。不过,斯威夫特不允许我这样做。如何强制didSet调用?