当你可以改变一个变量并且值无论如何都会改变时,为什么要使用 didSet 呢?
Why use didSet when you can just mutate a variable and the value changes anyway?
我通读了这篇 SO didSet q&a and Apple’s Property Observers 和其他几篇文章。我似乎无法理解的是,在改变变量时使用 didSet 的好处是什么,如果你在不使用 属性 观察者的情况下更改变量,它无论如何都会改变?
场景 1:
var someVal = 0
someVal = 10
// someVal now holds 10
场景 2:
var someVal: Int = 0{
didSet{
}
}
someVal = 10
// again someVal now holds 10
场景 3:
var someVal: Int = 0{
didSet{
if someVal > oldValue{
someVal = newValue
}
}
}
someVal = 10
// once again someVal holds a value of 10
我在场景 3 中唯一看到的是,如果不满足条件,则 someVal 不会改变。但是我可以简单地这样做而不是将它添加到 didSet 中,并且会发生同样的事情。
var someVal = 0
var anotherVal = 10
if someVal < anotherValue{
someVal = anotherValue
}
// once again someVal holds a value of 10
那么除了在 didSet 观察者中添加一个条件还有什么好处?
假设你有一个数组,它提供了一个 tableView
可以在代码中的任何地方更改该数组而不是编写
self.tableView.reloadData()
每一次改变都需要使用 didSet
var someVal: [String] = [] {
didSet{
self.tableView.reloadData()
}
}
这是一个简单的例子还有很多有用的案例
嗯,这是一个观察者。很多时候您想对 viewController 属性 的值做出反应。现在,如果您在 10 个不同的地方修改 属性,您不必 copy/paste 相同的代码 10 次不同的时间 - didSet
观察者会处理它。
例如:
var someVal: Int = 0 {
didSet {
somePostprocessing()
}
}
someVal = 10
// a bit later
someVal = 15
// etc.
优于:
var someVal: Int = 0
someVal = 10
somePostprocessing()
// a bit later
someVal = 15
somePostprocessing()
// etc.
在第一种情况下,您可以确定只要值发生变化,就会进行后处理。在第二种情况下,即使我们愿意接受 copy/pasting(这是不行的),您如何确定在每次修改值时都不会忘记添加 postProcessing?
didSet 是 属性 观察者 Swift
didSet{
}
didSet 是 属性 观察者。它用于在设置特定值时执行某些任务。
例如:
我在视图中有一个 UILabel(如在 MVC 中)
@IBOutlet weak private var someLabel: UILabel!
并且我们在我们的程序模型中的另一个变量中有它的值,就像在 (MVC) 中一样
var someValue: Int = 10
所以每当我更新模型中的变量时,视图中的 UILabel 也应该更新。
这可以通过 didSet as
var someValue: String = "Hello"{
didSet{
someLabel.text = someValue
}
}
所以在这里您可以直观地了解 didSet didSet 的作用。在上面的示例中,每当模型中变量的值发生变化时,视图也会更新。
我通读了这篇 SO didSet q&a and Apple’s Property Observers 和其他几篇文章。我似乎无法理解的是,在改变变量时使用 didSet 的好处是什么,如果你在不使用 属性 观察者的情况下更改变量,它无论如何都会改变?
场景 1:
var someVal = 0
someVal = 10
// someVal now holds 10
场景 2:
var someVal: Int = 0{
didSet{
}
}
someVal = 10
// again someVal now holds 10
场景 3:
var someVal: Int = 0{
didSet{
if someVal > oldValue{
someVal = newValue
}
}
}
someVal = 10
// once again someVal holds a value of 10
我在场景 3 中唯一看到的是,如果不满足条件,则 someVal 不会改变。但是我可以简单地这样做而不是将它添加到 didSet 中,并且会发生同样的事情。
var someVal = 0
var anotherVal = 10
if someVal < anotherValue{
someVal = anotherValue
}
// once again someVal holds a value of 10
那么除了在 didSet 观察者中添加一个条件还有什么好处?
假设你有一个数组,它提供了一个 tableView
可以在代码中的任何地方更改该数组而不是编写
self.tableView.reloadData()
每一次改变都需要使用 didSet
var someVal: [String] = [] {
didSet{
self.tableView.reloadData()
}
}
这是一个简单的例子还有很多有用的案例
嗯,这是一个观察者。很多时候您想对 viewController 属性 的值做出反应。现在,如果您在 10 个不同的地方修改 属性,您不必 copy/paste 相同的代码 10 次不同的时间 - didSet
观察者会处理它。
例如:
var someVal: Int = 0 {
didSet {
somePostprocessing()
}
}
someVal = 10
// a bit later
someVal = 15
// etc.
优于:
var someVal: Int = 0
someVal = 10
somePostprocessing()
// a bit later
someVal = 15
somePostprocessing()
// etc.
在第一种情况下,您可以确定只要值发生变化,就会进行后处理。在第二种情况下,即使我们愿意接受 copy/pasting(这是不行的),您如何确定在每次修改值时都不会忘记添加 postProcessing?
didSet 是 属性 观察者 Swift
didSet{
}
didSet 是 属性 观察者。它用于在设置特定值时执行某些任务。
例如:
我在视图中有一个 UILabel(如在 MVC 中)
@IBOutlet weak private var someLabel: UILabel!
并且我们在我们的程序模型中的另一个变量中有它的值,就像在 (MVC) 中一样
var someValue: Int = 10
所以每当我更新模型中的变量时,视图中的 UILabel 也应该更新。
这可以通过 didSet as
var someValue: String = "Hello"{
didSet{
someLabel.text = someValue
}
}
所以在这里您可以直观地了解 didSet didSet 的作用。在上面的示例中,每当模型中变量的值发生变化时,视图也会更新。