Carregar níveis SpriteKit do nome do arquivo

Para um jogo que estou criando, quero poder criar muitos níveis personalizados que podem ser carregados facilmente. Cada nível deve ter um arquivo de interface .sks e seu próprio arquivo .swift da subclasse SKScene.XCode http://i62.tinypic.com/14lhml2.png

No momento, isso está funcionando:

extension SKScene {
    class func unarchiveFromFile(file : NSString, theClass : AnyClass!) -> SKScene? {
        if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
            var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
            var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

            archiver.setClass(theClass, forClassName: "SKScene")
            let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKScene
            archiver.finishDecoding()
            return scene
        } else {
            return nil
        }
    }
}

Onde eu crio a cena assim:

if let scene = SKScene.unarchiveFromFile("Level1", theClass: Level1.classForKeyedUnarchiver())

Mas isso não funciona para grandes coleções, porque não posso iterar cada nível em, por exemplo, uma pasta deles. Eu preciso de algo assim

if let scene = SKScene.unarchiveFromFile("Level1", className:"Level1")

Eu tentei usaresta resposta para obter a classe da string assim, mas a cena carregou como se fosse apenas um SKScene, não um objeto de Level1.

let classFromString: AnyClass! = NSObject.swiftClassFromString("Level1")
    if let scene = SKScene.unarchiveFromFile("Level1", theClass: classFromString)

Por enquanto, vou trabalhar com isso, mas não acho que essa seja a melhor abordagem:

let levels = [
    ("Level1", Level1.classForKeyedUnarchiver()),
    ("Level2", Level2.classForKeyedUnarchiver())]

let level1 = levels[0]
let (fileName : String, theClass: AnyClass!) = classes[0]
if let scene = SKScene.unarchiveFromFile(fileName, theClass: theClass)

Eu só quero fazer uma grande coleção de subclasses do SKScene facilmente carregáveis, cada uma com seu próprio arquivo de interface.

questionAnswers(1)

yourAnswerToTheQuestion