你如何确定spritenode是否不等于nil?

时间:2015-04-19 11:40:16

标签: ios objective-c swift sprite-kit

所以在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'

有没有办法测试节点是否已经存在?

1 个答案:

答案 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。