Me gusta usar categorías para extender clases con nuevos métodos para este tipo de cosas. He aquí un extracto de código que acabo de escribir hoy:
@implementation UIColor (Extensions)
+ (UIColor *)colorWithHueDegrees:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness {
return [UIColor colorWithHue:(hue/360) saturation:saturation brightness:brightness alpha:1.0];
}
+ (UIColor *)aquaColor {
return [UIColor colorWithHueDegrees:210 saturation:1.0 brightness:1.0];
}
+ (UIColor *)paleYellowColor {
return [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
}
@end
Ahora en código Puedo hacer cosas como:
self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];
y mis propios colores definidos en forma directamente junto a los definidos por el sistema.
(Por cierto, estoy empezando a pensar más en términos de HSB en RGB como Presto más atención a los colores.)
ACTUALIZACIÓN respecto precomputen el valor: Mi corazonada es que no vale la pena. Pero si realmente quisieras, podrías memoize los valores de las variables estáticas:
+ (UIColor *)paleYellowColor {
static UIColor *color = nil;
if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
return color;
}
Se podría hacer una macro hacen los memoizing, también.
Sí, Objective-C es más específico de un idioma, pero está en el iPhone en este caso. – mobibob
'static UIColor * const color = ....' es posible en Objective-C++. Simplemente cambie la extensión para '* .mm'. –