Sprite kit EnumerateChildNodeWithName访问方法

Sprite kit EnumerateChildNodeWithName访问方法,sprite-kit,swift2,Sprite Kit,Swift2,我想按名称查找一些节点,然后在该节点上调用名为update的函数 具有以下代码: encounter.enumerateChildNodesWithName(enemy) { node, stop in node.update() } 我无法调用update()方法。我的敌人类如下所示 class EnemyPrototype: SKSpriteNode, EnemySprite { func update(){} }

我想按名称查找一些节点,然后在该节点上调用名为update的函数

具有以下代码:

encounter.enumerateChildNodesWithName(enemy)
{            
    node, stop in
    node.update()              
}
我无法调用update()方法。我的敌人类如下所示

class EnemyPrototype: SKSpriteNode, EnemySprite
{
  func update(){}
}
为什么它不起作用

我猜该节点引用的是SKSpriteNode类,而不是EnemyPrototype类

或者我只是错误地使用了EnumerateChildNodesWithName


谢谢。

那是因为节点是SKNode。您必须将其向下转换为EnemyPrototype,如下所示:

encounter.enumerateChildNodesWithName("enemy"){ node , stop in

    if let enemy = node as? EnemyPrototype {

         enemy.update()
    }          
}

我假设downcast可能会失败(例如,如果您将不同类型的其他节点添加到遭遇节点),因此我使用条件downcast
as?
操作符,而不是
as此运算符的版本(强制向下广播)。

这是因为节点是SKNode。您必须将其向下转换为EnemyPrototype,如下所示:

encounter.enumerateChildNodesWithName("enemy"){ node , stop in

    if let enemy = node as? EnemyPrototype {

         enemy.update()
    }          
}
我假设downcast可能会失败(例如,如果您将不同类型的其他节点添加到遭遇节点),因此我使用条件downcast
as?
操作符,而不是
as此运算符的版本(强制向下广播)