使用#define创建样式

时间:2011-12-09 23:08:26

标签: objective-c syntax coding-style c-preprocessor

我想知道我是否可以使用一系列#DEFINE为我的应用创建样式选项。

例如,

#DEFINE style1: backGroundColor = [UIColor: colorNamed whiteColor];
txtColor = [UIColor blackColor];  #DEFINE style2....

我的问题是:这句话的语法是什么?

3 个答案:

答案 0 :(得分:3)

虽然可以使用DEFINE语句为您的应用程序创建样式选项,但我想知道预处理程序指令的使用是否对样式等功能有意义,它们将成为属性的集合。如果使用DEFINE语句来定义样式,则很难最终将样式选择作为用户的运行时选项。

相反,我倾向于认为你最好为此创建一个类层次结构,并将其作为单例实现。使用类层次结构,您可以在根类中定义任何常规样式行为,然后从中继承以实现特定样式。稍后,如果需要,您可以向用户显示选择样式的功能。

答案 1 :(得分:1)

#define backgroundColor [UIColor whiteColor]然后使用它,你会说UIColor *txtColor = backgroundColor;

虽然您可能只能使用whiteColor作为定义而不是[UIColor whiteColor]。然后,您将调用[UIColor backgroundColor];而不是上述示例。

我不会这样做来生成样式。在代码之外定义各种设置是一个好主意,但使用定义是非常有约束力的,并且无法将UI从代码中解耦。


#define中,不要在任何地方加分号。当预处理器插入定义时,它将插入任何与分号完全相同的分号; 你不希望预处理器插入分号。在编写定义时你可能不知道你要编写它的所有地方,因此你不应该在其中加一个分号,因为你可能会写它内联表达。

另一种选择是使用const代替。

在我编写的代码中,我有#define个字符串文字@"literal string"和数字。在其他地方,我使用const声明,如下所示:

//static type *const variableName = assignment;

static NSString *const kConstantString = @"Constant variable";

常量不使用预处理器来填充信息。如果经常访问一个定义并使用某些计算,它可能更适合于只存储一次的常量声明。

我使用const而不是#define的另一个重要原因是,未对类型进行类型检查,因为它由预处理器处理。定义基本上关闭编译器警告,只给你错误;严格的警告非常有帮助,可以节省很多挫折。

答案 2 :(得分:1)

也许您正在寻找这种语法:

设置样式


#define STYLE1
//#define STYLE2

然后代码中的任何位置(类级别或方法级别,标题或实现文件)。


#ifdef STYLE1
   //code for the first style
   UIColor* backgroundColor = [UIColor redColor];
#elif STYLE2
   //code for the second style
   UIColor* backgroundColor = [UIColor greenColor];
#else
   //code for the third style
   UIColor* backgroundColor = [UIColor clearColor];
#endif


有关C预处理器的更多信息:http://en.wikipedia.org/wiki/C_preprocessor