我正在使用Swift开发应用程序。我为此从SCNNode创建一个子类:

class Charge: SCNNode {
    static var tagCounter = 0 //to give every charge a unique tag
    static var charges = [Charge]() //to have a pointer that can access all charges
    static var selectedCharge: Charge?  //pointer to selected charge

    override init() {
        super.init()
        super.geometry = Charge.carbonAtom()
        Charge.tagCounter++
        self.chargeTag = Charge.tagCounter
        Charge.charges.append(self)
    }
}

然后,在ViewController中多次启动该类之后,我想使用Charge.charges访问它们。但是由于某些未知的原因,只有最后一个实例可用,并且它占用了Charge.charges[0]

我试图通过在ViewController的var test = [Charge]()中添加属性来跟踪对象的运动,并在每次在ViewController中启动充电时都调用test.append(charge)。然后,当我要访问所有费用时,Charge.charges会丢失大部分费用,但test不会!有人可以启发我吗?还是Xcode中的错误?

n.b.我使用调试工具来跟踪此问题。事实证明,第二次初始化完成后Charge.charges会丢失其第一个内容,但是执行Charge.charges.append(self)后,第一个内容仍然存在

编辑:carbonAtom函数
class func carbonAtom() -> SCNGeometry {
    let carbonAtom = SCNSphere(radius: 0.8)
    carbonAtom.firstMaterial!.diffuse.contents = UIColor.redColor()
    carbonAtom.firstMaterial!.specular.contents = UIColor.whiteColor()
    return carbonAtom
}

最佳答案

我刚刚测试过,没有任何Xcode错误。

class Charge: NSObject {
static var tagCounter = 0 //to give every charge a unique tag
    static var charges = [Charge]() //to have a pointer that can access all charges

    override init() {
        super.init()
//        super.geometry = Charge.carbonAtom()
        Charge.tagCounter++
//        self.chargeTag = Charge.tagCounter
        Charge.charges.append(self)
    }
}

创建3个Change实例:
for var i = 0; i < 3; i++ {
        _ = Charge()
}

print(Charge.charges.count)

控制台显示3

尝试检查您的Charge.carbonAtom()静态方法。我怀疑charges数组的值是否清楚。

10-07 17:21