[英]Why use didSet when you can just mutate a variable and the value changes anyway?
我通讀了didSetQ& Apple的《 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觀察器中添加條件有什么好處呢?
好吧,它是一個觀察者。 很多時候,您想對更改viewController屬性的值做出反應。 現在,如果您在10個不同的地方修改該屬性, didSet
必將相同的代碼復制/粘貼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.
在第一種情況下,您可以確保隨時更改值,都將發生后處理。 在第二種情況下,即使我們願意接受復制/粘貼(這不行),如何確保在每次修改值時都不會忘記添加postProcessing?
假設您有一個數組,該表將提供一個tableView
,該數組可以在代碼中的任何位置更改,而無需編寫
self.tableView.reloadData()
每次更改都不要使用didSet
var someVal: [String] = [] {
didSet{
self.tableView.reloadData()
}
}
這是一個簡單的例子,有很多有用的情況
didSet是Swift中的屬性觀察器
didSet{
}
didSet是一個屬性觀察器。 設置特定值時,它用於執行某些任務。
例如:
我認為我們有一個UILabel(與MVC中一樣)
@IBOutlet weak private var someLabel: UILabel!
並且我們在程序模型中的另一個變量中具有它的值,如(MVC)
var someValue: Int = 10
因此,每當我在模型中更新變量時,視圖中的UILabel也應更新。
可以通過didSet作為
var someValue: String = "Hello"{
didSet{
someLabel.text = someValue
}
}
因此,在這里您可以直觀了解didSet didSet的功能。 在上面的示例中,只要模型中變量的值發生更改,視圖也會被更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.