所以在Obj-C中,我曾经这样做过:
SKSpriteNode *someNode = [SKSpriteNode spriteNodeWithImageNamed:@"foo"];
someNode.position = CGPointMake(100,100);
someNode.size = CGSizeMake(100,100);
[self addChild:someNode]
//I'd test it like this:
if (someNode) {
//Do something
}
//I could also do it like this:
if (someNode != nil) {
//Do something
}
但是,当我想在swift中实现相同的功能时,它会给我一个错误:二元运算符'!='不能应用于类型' SKSpriteNode'的操作数。和' nil'
我是这样做的:
if someNode != nil {
//Do something
}
我也试过这个:
if someNode {
//Do something
}
这给了我错误:键入' SKSpriteNode'不符合协议' BooleanType'
有没有办法测试节点是否已经存在?
答案 0 :(得分:2)
基本上,您必须考虑SKSpriteNode
节点派生自SKNode
,因此它会根据 Apple doc SKNode Class Reference继承其所有属性:
在 Swift 2.x 中,最好的一般方法是:
if let someNodeExist = self.childNodeWithName("\\someNode") {
print("\(someNodeExist.debugDescription)")
}
在 Swift 3.x :
if let someNodeExist = self.childNode(withName: "\\someNode") {
print("\(someNodeExist.debugDescription)")
}
或使用警卫:
guard let someNodeExist = self.childNode(withName: "\\someNode") else { return }
之后,您可以检查哪种类是someNodeExist或直接转换为SKSpriteNode。