Retornando dados da chamada assíncrona na função Swift

Eu criei uma classe de utilitário no meu projeto Swift que lida com todas as solicitações e respostas REST. Criei uma API REST simples para testar meu código. Eu criei um método de classe que precisa retornar um NSArray, mas como a chamada da API é assíncrona, preciso retornar do método dentro da chamada assíncrona. O problema é que o retorno assíncrono é nulo. Se eu estivesse fazendo isso no Node, usaria promessas de JS, mas não consigo descobrir uma solução que funcione no Swift.

import Foundation

class Bookshop {
    class func getGenres() -> NSArray {
        println("Hello inside getGenres")
        let urlPath = "http://creative.coventry.ac.uk/~bookshop/v1.1/index.php/genre/list"
        println(urlPath)
        let url: NSURL = NSURL(string: urlPath)
        let session = NSURLSession.sharedSession()
        var resultsArray:NSArray!
        let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
            println("Task completed")
            if(error) {
                println(error.localizedDescription)
            }
            var err: NSError?
            var options:NSJSONReadingOptions = NSJSONReadingOptions.MutableContainers
            var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: options, error: &err) as NSDictionary
            if(err != nil) {
                println("JSON Error \(err!.localizedDescription)")
            }
            //NSLog("jsonResults %@", jsonResult)
            let results: NSArray = jsonResult["genres"] as NSArray
            NSLog("jsonResults %@", results)
            resultsArray = results
            return resultsArray // error [anyObject] is not a subType of 'Void'
        })
        task.resume()
        //return "Hello World!"
        // I want to return the NSArray...
    }
}

questionAnswers(10)

yourAnswerToTheQuestion