Subclass SKSpriteNode: método para eliminar todas las articulaciones

He creado una subclass de SKSpriteNode. Conecto instancias de esa class junto con uniones de tipo SKPhysicsJointLimit. Lo hago dentro de my didEndContact (contacto: SKPhysicsContact) en mi GameScene:

var joint = SKPhysicsJointLimit.jointWithBodyA(contact.bodyA, bodyB: contact.bodyB, anchorA: pos1!, anchorB: pos2!) self.physicsWorld.addJoint(joint) 

Esto funciona bien hasta ahora. Luego llego al punto donde quiero liberar el nodo de la articulación. De acuerdo con los documentos de SKPhysicsBody, hay una propiedad llamada "uniones" que es una matriz que contiene objects SKPhysicsJoint. Pensé que eso es exactamente lo que necesito, pero no soy capaz de iterar sobre las articulaciones de una instancia y eliminarlas del mundo físico. Para hacer el trabajo, agregué un método a mi subclass SKSpriteNode personalizada.

 func freeJoints(world: SKPhysicsWorld){ if let joints = self.physicsBody?.joints { for joint in joints{ println("found a joint: \(joint)") // example print: //found a joint: <PKPhysicsJointRope: 0x7fbe39e95c50> world.removeJoint(joint as SKPhysicsJoint) } } } 

Llamar al método falla después de la sentencia println () con el post "Swift dynamic cast failed". Realmente agradecería su opinión sobre cómo trabajar con la propiedad conjunta de SKPhysicsBody. Más específicamente: ¿Cómo usar (echar?) Los elementos en la matriz para poder eliminarlos del SKPhysicsWorld de una escena.

Pasé un poco más de time investigando esto. Esto es lo que se me ocurrió:

Decidí agregar una propiedad a mi subclass SKSpriteNode y administrar las juntas yo mismo

  var joints: [SKPhysicsJointLimit] override init(){ ... self.joints = [] ... } 

Cada vez que agrego una articulación al SKPHysicsWorld de la escena, también la agrego al set de articulaciones del SKNNode mismo. Mientras que iterando las articulaciones de SKPHysicsBody-Array falló (ver pregunta) en el punto que quería transmitir a SKPhysicsJoint, eliminar elementos del mundo de la física funciona como está previsto al repetir la matriz de elementos SKPhysicsJointLimit:

 func freeJoints(world: SKPhysicsWorld){ for item in self.joints{ println("removing item from physics world \(item)") world.removeJoint(item) } self.joints.removeAll(keepCapacity: false) } } 

Esto parece no ser la forma más elegante de hacer el trabajo, ya que ya hay una matriz gestionada por marco que promete ser la misma. Pero no pude utilizarlo y esto funciona por ahora.