【问题标题】:How do you determine if a spritenode is not equal to nil?你如何确定一个 spritenode 是否不等于 nil?
【发布时间】:2015-04-19 11:40:15
【问题描述】:

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

这给了我错误:Type 'SKSpriteNode' does not conform to protocol 'BooleanType'

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

【问题讨论】:

  • 在 Swift 文档中查找“可选”:)

标签: ios objective-c swift sprite-kit


【解决方案1】:

基本上你必须考虑到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,由您决定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2015-07-17
    • 1970-01-01
    • 2016-01-21
    • 2012-02-22
    相关资源
    最近更新 更多