所以在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’
有没有办法测试节点是否已经存在?
最佳答案 基本上你必须考虑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.