Intentando acceder a la respuesta globalmente

Estoy usando Alamofire y cuando obtengo la respuesta estoy tratando de configurarlo como una variable a la que puedo acceder en cualquier lugar. Esto es lo que conseguí

var data: NSData? Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters) .responseJSON { (request, response, JSON, error) in let data: AnyObject? = JSON } println(data) 

Y cuando ejecuto eso no tengo … ¿Alguna idea? Sé que la request es buena porque puedo ver la respuesta dentro del scope cuando no la asigno a una variable.

Almofire.request es una function asíncrona. Lo llamas y regresará de inmediato; antes de que realmente haga la request. Entonces, se println(data) antes de que algo establezca data en algo que no sea nil . Cuando la request esté completa, Alamofire llamará al cierre que pase a responseJSON , en ese cierre es donde querrá realmente usar los data (imprimirlo o lo que sea):

 Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters) .responseJSON { (request, response, JSON, error) in let data: AnyObject? = JSON // do something useful with data println(data) } 

Pregunta de los comentarios:

Pero luego digo que quiero convertir esos datos en una tabla. ¿Acabo de poner todo el código de la tabla dentro del cierre?

Podría poner todo ese código dentro del cierre, pero eso probablemente se ensucie bastante rápido. Una mejor manera de manejarlo es implementar el mismo tipo de patrón que Alamofire.request está utilizando. Básicamente, hacer su request con su propia function tendrá un cierre como parámetro. Luego, en el cierre, pasas a responseJSON , llama al cierre que pasó a tu function y pasa los data . Luego, haga una function separada para "convertir esos datos en una tabla" y llámelo con data de su cierre. Algo como esto:

 func callSomeAPI(resultHandler: (data: AnyObject?) -> ()) -> () { Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters) .responseJSON { (request, response, JSON, error) in let data: AnyObject? = JSON resultHandler(data) } } func makeTable(data: AnyObject?) -> () { // make your table } callSomeAPI() { data in makeTable(data) } 

Nota: ¿Probablemente quiera convertir data a algo distinto de AnyObject? en algún punto de allí.

Es porque cuando let data: AnyObject? = JSON let data: AnyObject? = JSON usted creó una nueva variable local de data en el cierre.

Deberías hacer esto en su lugar:

 var data: NSData? Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters) .responseJSON { (request, response, JSON, error) in data = JSON } println(data)