Ios 如何确定spritenode是否不等于零?

Ios 如何确定spritenode是否不等于零?,ios,objective-c,swift,sprite-kit,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 someth

所以在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
}
if someNode != nil {
  //Do something
}
然而,当我想在swift中实现同样的功能时,它会给我一个错误:二进制运算符“!=”无法应用于“SKSpriteNode”和“nil”类型的操作数

我是这样做的:

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
}
if someNode != nil {
  //Do something
}
我也试过:

if someNode {
  //Do something
}
这给了我一个错误:类型“SKSpriteNode”不符合协议“BooleanType”


有没有一种方法来测试一个节点是否已经存在?

基本上你必须考虑<代码> SKSpriteNode < /代码>节点从<代码> SKNode < /C>中派生,因此它继承了它的所有属性,根据Apple DOC:

在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转换的类的类型,由您决定。

在Swift文档中查找“optionals:)