ios - 你如何确定一个 spritenode 是否不等于 nil?

标签 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 中实现同样的事情时,它给我错误:二元运算符 '!=' cannot be applied to operands of type 'SKSpriteNode' and 'nil'

我是这样做的:

if someNode != nil {
  //Do something
}

我也试过这个:

if someNode {
  //Do something
}

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

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

最佳答案

基本上您必须考虑 SKSpriteNode 节点派生自 SKNode,因此它根据 Apple 文档 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,由您决定。

关于ios - 你如何确定一个 spritenode 是否不等于 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729372/

相关文章:

objective-c - UITableView reloadData 重复数据

ios - 根据滚动逐渐改变背景颜色

swift - 查找 swift 框架中的新增功能

ios - 图像在循环动画中移动 - Swift

ios - 如何在后台更新 UILabel 计时器

ios - 应用商店崩溃报告

ios - 从 View 模型结构中获取值

iphone - 标签栏应用中的表格 View

objective-c - 使用 UISegmentedControl 切换到 MKMapView 和 UITableView

objective-c - 启用点击 webview 中的链接