【发布时间】:2020-01-21 12:22:34
【问题描述】:
我想在数组计数改变时调用一些函数。我可以使用 willSet 执行此操作吗,或者如何检查它
【问题讨论】:
-
这里明显的问题是,您是否尝试查看它是否适用于
willSet?
我想在数组计数改变时调用一些函数。我可以使用 willSet 执行此操作吗,或者如何检查它
【问题讨论】:
willSet?
属性观察者观察并响应属性的变化 价值。每次属性值被调用时,都会调用属性观察者 设置,即使新值与属性的当前值相同 价值。
您可以选择定义这些观察者中的一个或两个 属性:
- willSet 在值被存储之前被调用。
- 在存储新值后立即调用didSet。 source
var arr = [1,2] {
willSet {
let newCount = newValue.count
callMe(count: newCount)
}
didSet {
let newCount = arr.count
callMe(count: newCount)
}
}
func callMe(count: Int) {
print(count)
}
【讨论】:
检查newValue的count和willSet中的当前arr,即
var arr = [1, 2] {
willSet {
if newValue.count != arr.count {
print("Count changed...")
}
}
}
示例:
arr.append(3) //Count changed...
arr[0] = 4
arr.remove(at: 0) //Count changed...
【讨论】:
var testArray : [Int] = [] {
willSet{
self.getCountBeforeAdd(index: testArray.count)
}
didSet {
self.getCountAfterAdd(index: testArray.count)
}
}
func getCountBeforeAdd(index:Int) {
print("countBeforeAdd : \(index)")
}
func getCountAfterAdd(index:Int) {
print("countAfterAdd : \(index)")
}
@IBAction func btnAddNew(_ sender: Any) {
self.testArray.append(5)
}
【讨论】: