Temas de la aplicación ancha en Swift en iOS

Tengo una solución, pero para mí parece una solución muy hacky y no muy elegante. Pero busqué, busqué y no pude encontrar otra cosa. Tal vez alguien pueda sugerir una mejor solución?

Entonces, el problema, quiero tener un file en el que defina todos los colors y las fonts y el tipo de mi aplicación. Creé una estructura de estilo con un montón de variables estáticas como esta:

struct Style{ static var colorA = UIColor.networkingColor() static var colorB = UIColor.blackColor() static var titleText = colorA static var mainText = colorA static var backColor = colorB static var callBackColor = backColor } 

Debo usar start var porque quiero poder hacer reference a variables previamente declaradas en las definiciones de nuevas variables, y esa es la única forma en que podría hacer que funcione.

En general, arriba funciona bien. En mi código siempre puedo hacer reference a un color u otro significado como Style.titleText , por ejemplo. Entonces parece una buena solución.

Sin embargo, decidí agregar temas. Para hacerlo, agregué un método estático llamado theme1 que sobrescribe algunas vars estáticas desde arriba y agrega un selector de tema. Suficientemente simple:

 struct Style{ static var colorA = UIColor.networkingColor() static var colorB = UIColor.blackColor() static var titleText = colorA static var mainText = colorA static var backColor = colorB static var callBackColor = backColor static func themeSelector(){ // some logic loading defaults and running appropriate theme function bellow } static func theme1(){ backColor = UIColor.greenColor() callBackColor = UIColor.greenColor() } } 

Pero luego me encontré con un problema, ¿cómo disparar themeSelector ? Intenté anular el método de initialization y convertir mi estructura en una class, pero la function de initialization no se dispararía a time, por lo que algunas de las variables que dependían de la configuration de Estilo en sus instrucciones de statement no se cargarían con la configuration de tema actualizada, sino con la Defectos.

También intenté poner la llamada en el método didFinishLaunchingWithOptions de AppDelegate, pero el mismo resultado que el anterior.

Terminé haciendo algo realmente idiota, declarando una variable en mi class ViewController así:

 var loadThem: Bool = { Style.themeSelector() return true }() 

Esto funciona, pero … realmente, es esa la mejor manera. ¿Hay una mejor manera de hacer temas? ¿Hay una mejor manera de llamar a una function en la carga de una class o estructura (el método de carga de reemploop no es una opción más a partir de Swift 1.2). Entonces, ¿hay una mejor manera?