我正在使用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
数组的值是否清楚。