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

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

点赞