- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我熟悉属性观察者的含义以及如何使用它。但是,我真正不明白的是何时使用它们中的每一个。在我看来这无关紧要..如果我使用 didset,我可以使用属性本身来使用 oldValue 或新值。如果我使用 willset,我可以使用属性本身来使用 newValue 或旧值。所以.. didset 中的 oldValue 就像 willset 中的属性本身,willSet 中的 newValue 就像 didset 中的属性本身:
var propObserve = 1 {
willSet {
print("my previous value was \(propObserve) and my future value will be \(newValue)")
}
didSet {
print("my previous value was \(oldValue) and my future value will be \(propObserve)")
}
}
propObserve = 2
我将从他们每个人那里得到相同的打印品。我知道 willSet 之前执行,didSet 在属性设置为新值之后执行,但我仍然可以在这两种情况下使用新值和旧值(在 willSet 和 didSet 中)
Q1:什么时候更喜欢使用一个而不是另一个?Q2:你能给我一个具体的例子吗?
提前致谢
最佳答案
每个都有很多用例,但这里有几个例子。
使用 willSet
对新值执行验证,将其限制在特定的数值范围内,四舍五入,或将其保存到以前值的历史记录中。使用 willSet
使程序员能够在赋值之前更改值。
使用 didSet
在值更改后执行任何操作,例如更新用户界面、重新加载 TableView 、将某些内容记录到 API 或更改另一个相关值。使用 didSet
分配值并允许根据该分配执行操作。
在其他一些用例中,两者都可以。
关于Swift 属性观察器 - didset 与 willset 使用的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005913/
我正在尝试创建可选数组,但我希望仅在将元素附加到之前进行初始化。 所以我写道: var names: [String]? { willSet { if
您好,我有一个使用 willset 功能的可选变量。由于它是可选的,因此常规集将不起作用。在 will set 中,如果新值为 nil,我将变量设置为至少对其进行初始化。不幸的是,之后的值(value
我在 Swift 2 中有一个奇怪的情况,在某些情况下,当我引用一个属性时,该属性的 set 观察者被调用。 以下代码示例说明了这个问题: var i = 0 protocol PropertyPro
所以我正在学习 swift2 并且正在使用 friend 的项目。他有一个游戏计数器,但我想在用户死亡时创建一个标签。我尝试将分数标签设置为 (score),但代码将分数设置为 0,并且没有机会 sc
这个问题在这里已经有了答案: Change the value that is being set in variable's willSet block (3 个答案) 关闭 4 年前。 对于存储
这个问题在这里已经有了答案: What is the purpose of willSet and didSet in Swift? (11 个答案) 关闭 5 年前。 我是编程新手,我很难理解这两
我正在使用 xCode 9.2、Swift 4.1 鉴于这两个过度简化的类,目前有效: class Prop : Codable { var origin:String? var re
我想通过使用 didSet/willSet API 观察类中几个属性的变化。但是我想保持我的属性声明部分干净,所以我想有单独的函数来实现这个逻辑。 现在我有这样的东西: var myProperty:
逻辑是当一个数组有指定数量的元素时清除它。我可以将检查放在数组之外,但我想看看如果在数组的 willSet 事件中执行它会怎样。结果是 Array 中的元素保持静止。 这是代码 var MyArr=[
我正在尝试创建一个 UIView 子类。在初始化中,我设置了我希望子类拥有的最小和最大 y 轴原点值。该 View 将通过用户手势或动画以编程方式上下移动。我希望我可以为此使用 willSet 属性用
这个问题已经有答案了: What is the purpose of willSet and didSet in Swift? (11 个回答) 已关闭 6 年前。 我了解如何使用didSet和wil
您好,我写的是关于 https://appventure.me/2015/10/17/advanced-practical-enum-examples/#sec-4-2 的帖子 如何在属性的 didS
如何找出元组的哪个变量在 willSet/didSet 被更新? var myTuple: (a: Int, b: Int) { didSet { // Which one was
每当我设置一个 Realm 对象的属性时,我想触发代表我远程后端上的对象的另一个对象的更改。 我想知道这是否仍然是推荐的最佳实践: https://github.com/realm/realm-coc
如果我有一个 Collection View 委托(delegate)助手类,其属性如下所示: weak var delegate: UICollectionViewDelegate? { w
我在编辑器中收到一个奇怪的警告,我需要帮助来理解它想要什么 Attempting to store to property 'someProperty' within its own willSet,
如果我将属性值设置为与当前设置相同的值,会调用 willSet 和 didSet 吗?当您在这些功能中出现副作用时,了解这一点很重要。 最佳答案 是的,即使设置为相同的值,willSet 和 didS
我试图在设置之前对正在设置的数组进行排序,但 willSet 的参数是不可变的,sort 会改变值。我怎样才能克服这个限制? var files:[File]! = [File]() { wi
我想做的是在一个对象被替换为我的服务对象的委托(delegate)时通知它。我想知道是否有一种方法可以创建 willSet 的默认提示,这样我就不必为我创建的每个服务对象重复代码: protocol
我熟悉属性观察者的含义以及如何使用它。但是,我真正不明白的是何时使用它们中的每一个。在我看来这无关紧要..如果我使用 didset,我可以使用属性本身来使用 oldValue 或新值。如果我使用 wi
我是一名优秀的程序员,十分优秀!