这是本猫遇到的比较怪异的问题之一:明明在集合中的对象,但却无法直接删除它。由于原项目较为复杂,为了演示目的,本猫对博文示例代码做了简化,但并不影响问题的表述。
背景介绍
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<Node> = []
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