我是objective-c的新手,我有一个建筑或设计模式问题。我正在构建一个ios应用程序,像大多数ios应用程序一样,它使用各种颜色,字体,模式等。也许我目前正在编写错误的代码,但我发现自己重写了颜色设置等内容。结果,改变颜色成为查找代码中的所有颜色设置,重写它们等的练习。对我来说似乎有点低效。
例如,我在我的应用中的多个位置使用深红色。我倾向于频繁地编写[UIColor colorWithRed ...]方法。但是,我很好奇是否创建一个返回我的自定义颜色的单例(作为UIColor)是“模块化我的样式包”的合理方法。因此,我可以写这样的东西
[label setTextColor:[[MyStyleSingletonClass sharedStyler] myDarkRed]];
因此,如果设计师突然希望myDarkRed变得更暗,我会改变它一次并且很好地浏览应用程序。显然,风格和用户体验比色彩还要多,但我很好奇这种方法是否有意义,或者我是否在为将来的问题做好准备。或者也许这个功能已经存在于objective-c中,我错过了这一点。提前致谢。
答案 0 :(得分:8)
我认为对这样的事情采用更好的方法是UIColor本身的一类类方法。我经常为具有大量自定义颜色的项目编写颜色类别。
这样的事情:
// UIColor+AppAdditions.h
@interface UIColor (AppAdditions)
+ (UIColor *)myDarkRed;
@end
// UIColor+AppAdditions.m
#import "UIColor+AppAdditions.h"
@implementation UIColor (AppAdditions)
+ (UIColor *)myDarkRed
{
return [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0];
}
@end
这样你就不需要一个完整的Singleton,而且它更容易使用Singleton做其他事情。你可以干净利地访问你的颜色:
[label setTextColor:[UIColor myDarkRed]];
注意强>
正如Rob和Paul所说。最好恰当地命名它们。我拿了你的名字,但最好是专门为它们的名字命名,并遵循前缀和后缀等惯例。
答案 1 :(得分:5)
为什么不使用macro
?
YourHelperClass.h
中的
#define DARK_RED [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0]
你可以像这样使用(别忘了导入YourHelperClass.h
):
[label setTextColor:DARK_RED];
我认为最好使用macro