你如何确定一个 spritenode 是不是不等于 nil?
Posted
技术标签:
【中文标题】你如何确定一个 spritenode 是不是不等于 nil?【英文标题】: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 文档中查找“可选”:) 【参考方案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,由您决定。
【讨论】:
以上是关于你如何确定一个 spritenode 是不是不等于 nil?的主要内容,如果未能解决你的问题,请参考以下文章