gpt4 book ai didi

swift - 如何防止重复引用数组中的类对象?

转载 作者:行者123 更新时间:2023-11-28 15:33:38 26 4
gpt4 key购买 nike

我正在寻找一种方法来防止数组重复引用其中的同一对象。我指的不是重复值 - 没关系。

例如,我知道在 Apple 的 SpriteKit 框架中,一个 SKNode 对象将其子节点存储在一个数组中(var children: [SKNode]),并且将一个节点添加到父节点两次会使程序崩溃。

let parent = SKNode()
let child1 = SKNode()
let child2 = SKNode()
parent.addChild(child1)
parent.addChild(child2) // Allowed, although child2 == child1.
parent.addChild(child1) // Causes a crash.

这正是我想要模仿的行为。我将如何管理这个?是否有可能不必比较每个引用而具有 O(n) 的复杂性?

最佳答案

我不确定您为什么要这样做,但您可以按照以下方式进行操作:

...

var childReferences = Set<ObjectIdentifier>

private func validateUniqueness(_ node: SKNode) {
guard childReferences.insert(ObjectIdentifier(node)).inserted else {
fatalError("An attempt was made to add a duplicate child")
}
}

override func addChild(_ node: SKNode) {
validateUniqueness(node)
super.addChild(node)
}

override func insertChild(_ node: SKNode at index: Int) {
validateUniqueness(node)
super.insertChild(node, at: index)
}

override func removeChildren(in nodes: [SKNode]) {
childReferences.subtract(nodes)
super.removeChildren(in nodes: [SKNode])
}

override func removeAllChildren() {
childReferences.removeAll(keepingCapacity: false)
super.removeAllChildren()
}

关于swift - 如何防止重复引用数组中的类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44512107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com