Cómo crear varios UIColor en caché
Tengo colores personalizados dentro de mi código. Los uso varias veces y me gustaría asignarlos solo una vez.
La situacion / problemaSi echamos un vistazo a los encabezados UIColor, podemos ver lo siguiente:
[...]
// Some convenience methods to create colors. These colors will be as calibrated as possible.
// These colors are cached.
open class var black: UIColor { get } // 0.0 white
open class var darkGray: UIColor { get } // 0.333 white
[...]
He creado unextension
de UIColor, así:
import UIKit
extension UIColor {
class func colorWithHexString(_ hex: String) -> UIColor {
print("\(#function): \(hex)")
// some code, then it return a UIColor
return UIColor(
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: CGFloat(1.0)
)
}
// Option A
open class var myColorOne : UIColor {
get {
return colorWithHexString("AABBCC")
}
}
// Option B
class func myColorTwo() -> UIColor {
return colorWithHexString("DDEEFF")
}
}
Desde allí puedo usar mis colores fácilmente, ya sea con una variable o una función.
// A
UIColor.myColorOne
// B
UIColor.myColorTwo()
Lamentablemente, no estoy completamente feliz con eso. De hecho, cada vez que quiero usar esos colores: se realiza una nueva asignación de UIColor.
Lo que he intentadoApple logró hacer que su color en caché aparentemente. A mí también me gustaría hacerlo. He intentado varias cosas pero ninguna parece ser ideal.
1 - Usando dispatch_once ✗Como se ve en la página Swift:la función libredispatch_once
ya no está disponible en Swift.
Obtuve el siguiente error :las extensiones pueden no contener propiedades almacenadas
3 - Crear un singleton ~Funciona (cada color se crea solo una vez) con lo siguiente
import UIKit
class Colors : UIColor {
// Singleton
static let sharedInstance = Colors()
let myColorOne : UIColor = {
return UIColor.colorWithHexString("AABBCC")
}()
let myColorTwo : UIColor = {
return UIColor.colorWithHexString("DDEEFF")
}()
}
Pero me obliga a tener un archivo más y llamar a mis colores así
Colors.sharedInstance.myColorOne
¿No hay alguna manera de obtener los colores que quiero asíUIColor.myColorOne
y los ha guardado en caché como lo hace Apple?