Ios 访问循环中添加的精灵节点以调用类继承方法?

Ios 访问循环中添加的精灵节点以调用类继承方法?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我已经创建了许多SKSpriteNodes,将它们添加到for循环中的场景中 func addBlocks(number : Int) { for _ in 1...number { let block = Obstacle() addChild(block) } } 因为它们是在这个循环中创建的,所以我不能调用block.myMethod()。我当然可以调用childNodeWithName(“block”)来执行它作为节点继承的东西,比如.

我已经创建了许多SKSpriteNodes,将它们添加到for循环中的场景中

func addBlocks(number : Int) {
    for _ in 1...number {
        let block = Obstacle()
        addChild(block)
    }

}
因为它们是在这个循环中创建的,所以我不能调用
block.myMethod()
。我当然可以调用
childNodeWithName(“block”)
来执行它作为节点继承的东西,比如
.removeFromParent()
。 如果我想调用在障碍类(SKSpriteNode的子类)中实现的方法,我应该怎么做。

SKSpriteNode的障碍子类 假设您有
障碍
,定义如下

class Obstacle: SKSpriteNode {
    func explode() { }
}
有名字的障碍物 如果向场景添加
障碍物
,则可以向节点添加名称,如

func addBlocks(number : Int) {
    for i in 1...number {
        let block = Obstacle()
        block.name = "block_\(i)" // <-- like here
        addChild(block)
    }
}
在下面的代码中,如果强制转换失败(这意味着返回的值不是
障碍物
,则控制台上会打印一条错误消息)。 否则,如果成功将该值转换为do
障碍
,则可以调用添加到
障碍
的任何方法

func explodeObstacle(i: Int) {
    guard let obstacle = self.childNodeWithName("block_\(i)") as? Obstacle else {
        debugPrint("Could not find an Obstacle with name block_\(i)")
        return
    }
    obstacle.explode()
}