joh*_*doe 5 key-value-observing swift swift4
我在Swift 4项目中有以下代码.
class DishesTableViewController : UITableViewController {
private var token :NSKeyValueObservation?
@objc dynamic private(set) var dishes :[Dish] = []
override func viewDidLoad() {
super.viewDidLoad()
// configure the observation
token = self.observe(\.dishes) { object, change in
// change is always nil
print(object)
print(change)
}
updateTableView()
}
Run Code Online (Sandbox Code Playgroud)
每当更换餐具阵列时,都会触发观察.但我的问题是如何才能获得发生的实际更改,即如何访问触发更改的实际Dish对象?
我认为原因change是nil因为你没有指定选项.
重写如下:
override func viewDidLoad() {
super.viewDidLoad()
// configure the observation
token = self.observe(\.dishes, options: [.new,.old]) { object, change in
print(object)
let set1 = Set(change.newArray!)
let set2 = Set(change.oldArray!)
let filter = Array(set1.subtract(set2))
print(filter)
}
updateTableView()
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里做了一些关于你的Dish对象的猜测.我假设你已经使它符合Equatable协议,这是解决方案工作的必要步骤.
更新:此要求现已反映在此处的官方Apple文档中.
如果您不需要知道属性的更改方式,请省略options参数.省略options参数以放弃存储新旧属性值,这会导致oldValue和newValue属性为nil.
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |