提示:本篇博文涉及到第三方库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
非自由程序员,CSDN博客认证专家。CSDN汇编板块版主, CSDN其他开发语言大版版主。对App、以及Cocos2D、SpriteKit游戏开饶有兴趣。目前常用的语言是ObjC、Swift、Ruby等。不过看到编程艺术、ASM、逆向和C时依然欲罢不能。虽然不是,但喜欢黑客的思维和哲学,认为社会工程学很酷,但还没有实际用来撩过妹。