我想知道我是否可以使用一系列#DEFINE
为我的应用创建样式选项。
例如,
#DEFINE style1: backGroundColor = [UIColor: colorNamed whiteColor];
txtColor = [UIColor blackColor]; #DEFINE style2....
我的问题是:这句话的语法是什么?
答案 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