提示:本篇博文涉及到第三方库Eureka,但核心思想在于Swift内部数据处理的推断,不了解Eureka并不影响对本文的理解。Eureka只不过是对UITableView的便捷包装而已,需要进一步了解Eureka的童鞋可以观赏本猫Eureka学习系列博文。
上篇在此 : Swift中由找不到removeAll(where:)方法引起的连锁反应(上)
化繁为简,以管窥豹为了能够明白为什么removeAll(where:)可以正确处理多个Row的删除,我们需要先看一下与其相关的两个方法:
//删除全部Row func removeAll(keepingCapacity keepCapacity: Bool = false) //删除指定位置的一个Row func remove(at position: Int) -> BaseRow
这两个方法都是RangeReplaceableCollection协议必须遵守的方法.因为源代码并不长,所以这里贴出来供大家参考,首先是删除全部Rows:
public func removeAll(keepingCapacity keepCapacity: Bool = false) { // not doing anything with capacity for row in kvoWrapper._allRows { row.willBeRemovedFromSection() } kvoWrapper.rows.removeAllObjects() kvoWrapper._allRows.removeAll() }
由上可知删除全部Cell其实就是删除Section中kvoWrapper对象中的全部ro