有没有更好的方法来观察数组中的添加和删除

时间:2017-11-24 22:17:39

标签: arrays swift

我有一个数组,它在我的GUI中由绑定到NSTableView的NSArrayController控制。底层数组位于ViewController中。

我想知道添加或删除新元素的时间。我特别想知道添加或删除的元素。

我尝试将NSArrayController子类化为覆盖添加/删除 - 这感觉是正确的方法,但我无法让它工作。

我最终做了以下事情:

@objc dynamic var dataArray: [ActivityGraphDefinition] = []{
    willSet{ oldArray = dataArray}
    didSet{ dataArrayChanged() }
}

通过获取oldArray的引用,我可以比较两者并找出dataArrayChanged()方法中添加或删除的内容。它有效,但确实感觉不对。

有更好的方法吗?我在线搜索但尚未找到合适的方法。

1 个答案:

答案 0 :(得分:0)

您可以做的一个小改进是将其更改为:

@objc dynamic var dataArray: [ActivityGraphDefinition] = []{
    didSet{ dataArrayChanged(old: oldValue, new: dataArray) }
}

didSet闭包已经传入了一个名为oldValue的参数。这至少可以节省您需要实现willSet和另一个ivar(oldArray)来比较旧与新的,所以更清洁,更简单。

它并没有真正改变你现有的拦截和处理变化的方法,但如果最终保持这种方法,它至少会简化它并减少状态。