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 / problema

Si 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 intentado

Apple 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.

2 - Creando una constante (let) ✗

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?

Respuestas a la pregunta(4)

Su respuesta a la pregunta