Swift Pasar datos desde appDelegate a otra class

Necesito pasar una variable desde AppDelegate a otra class que he creado para contener variables globales del proyecto y no puedo encontrar una manera de hacer que funcione.

Este es el código en AppDelegate:

func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) { println("Device's token is: \(deviceToken)") //Global Variables Class Instance let globals:Globals = Globals() globals.setDeviceToken("test1") //method1 not working globals.deviceToken = "test2" //method2 not working } 

Esta es mi class Globals:

 public class Globals { var deviceToken = String() init() { //nothing } func setDeviceToken(s:String){ deviceToken = s } func getDeviceToken() -> String { return deviceToken } } 

Si trato de imprimir el valor, de otros files del proyecto, no puedo get nada, solo una cadena vacía.

 class ViewController: UIViewController { //Global Variables Class Instance let globals:Globals = Globals() override func viewDidLoad() { println(globals.getDeviceToken()) //return empty string println(globals.deviceToken) //return empty string 

*** ACTUALIZACIÓN: A los que votaron mi pregunta: muchas gracias. Lo siento si no soy un experto de Swift (todavía) y lo siento si estoy usando stackoverflow para preguntar algo que no sé.

Hay varios patrones que puedes usar para lograr lo que quieres.

  1. Podrías acceder a AppDelegate a través de la UIApplication:

     let delegate = UIApplication.shanetworkingApplication().delegate as AppDelegate let deviceToken = delegate.deviceToken 
  2. Mira en singletons. Una rápida búsqueda en Google de 'Swift singleton' te ayudará mucho. El primer resultado:

     class SingletonB { class var shanetworkingInstance : SingletonB { struct Static { static let instance : SingletonB = SingletonB() } return Static.instance } } 

Luego, use shanetworkingInstance para crear una instancia de singleton en cualquier lugar y acceder a las mismas variables.

El primero es rápido y sucio, por lo que para proyectos más serios recomendaría el patrón singleton.

Probablemente hay un millón de maneras de hacer esto, pero esto debería comenzar

(Más en este enlace, que explora algunas forms de implementar singletons: https://github.com/hpique/SwiftSingleton )

Simplemente resolví mi problema usando NSUserDefaults

en la AppDelegate:

 NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "deviceToken") NSUserDefaults.standardUserDefaults().synchronize() 

De otras classs:

 NSUserDefaults.standardUserDefaults().objectForKey("deviceToken") 

Sinceramente, no sé si esta es una buena manera de hacerlo pero está funcionando

*** ACTUALIZACIÓN: A los que votaron mi pregunta: muchas gracias. Lo siento si no soy un experto de Swift (todavía) y lo siento si estoy usando stackoverflow para preguntar algo que no sé.