这是本猫遇到的比较怪异的问题之一:明明在集合中的对象,但却无法直接删除它。由于原项目较为复杂,为了演示目的,本猫对博文示例代码做了简化,但并不影响问题的表述。
背景介绍App逻辑很简单,对象Node对应着TableView中每一行,你不用知道Node对象到底是啥,你只要知道它是列表每一行后面的那个数据对象:
class Node:Equatable{ var nodeId:Int var parentId:Int var depth:Int static func ==(lhs:Node,rhs:Node)->Bool{ return lhs.nodeId == rhs.nodeId } //其它代码忽略之... }
所有Node都放在Folder对象的nodes属性里,TableView对应一个Folder对象:
class Folder{ private var nodes:Set= [] func add(node:Node){ node.parentId = self.nodeId node.depth = isInRoot ? 1 : 2 nodes.insert(node) } func delete(node:Node){ node.parentId = -1 habitHolder.depth = 0 nodes.remove(node) } //其它代码忽略之... }
如上,当删除TableView中的某一行时,就会删除该行对应的Node对象:
<