我想知道是否可以使用一系列#DEFINE
为我的应用创建样式选项。使用#define创建样式
例如,
#DEFINE style1: backGroundColor = [UIColor: colorNamed whiteColor];
txtColor = [UIColor blackColor]; #DEFINE style2....
我的问题是:什么是这个语句的语法?
我想知道是否可以使用一系列#DEFINE
为我的应用创建样式选项。使用#define创建样式
例如,
#DEFINE style1: backGroundColor = [UIColor: colorNamed whiteColor];
txtColor = [UIColor blackColor]; #DEFINE style2....
我的问题是:什么是这个语句的语法?
虽然它肯定可以使用DEFINE
语句来为您的应用程序创建样式的选择,我想知道如果使用预处理指令的有意义的功能,如样式,这些样式将成为属性的集合。如果使用DEFINE
语句来定义样式,则最终难以将样式选择作为运行时选项提供给用户。
相反,我倾向于认为为此创建类层次结构并将其作为单例实现将会更好。通过类层次结构,您可以在根类中定义任何常规样式行为,然后从中继承以实现特定的样式。稍后,如果需要,可以向用户公开选择样式的功能。
#define backgroundColor [UIColor whiteColor]
然后使用它你会说UIColor *txtColor = backgroundColor;
。
虽然您可能只能使用whiteColor
作为定义而不是[UIColor whiteColor]
。然后您会拨打[UIColor backgroundColor];
而不是上面的示例。
我不会这样做来生成样式。定义代码之外的各种设置将是一个好主意,但使用define是相当具有约束力的,并且破坏了将UI与代码分离的目的。
在#define
不要在任何地方放一个分号。当预处理器插入定义时,它将插入任何分号,就像它一样; 你不希望预处理器插入分号。在编写定义时,您可能并不知道要编写它的所有位置,因此您不应该在其中包含分号,因为您可能会将它写入内联表达式中。
另一种选择是使用const
代替。
在我写的代码中,我有#define
s用于字符串文字@"literal string"
和数字。在其他地方,我用的是const
声明看起来像这样:
//static type *const variableName = assignment;
static NSString *const kConstantString = @"Constant variable";
常量不使用预处理程序填写的信息。如果你经常访问一个定义,并且它使用了一些计算,它可能会更适合一个只存储一次的常量声明。
我使用const
而不是#define
的另一个重要原因是,由于预处理器处理了define,因此未进行类型检查。定义基本上关闭编译器的警告,只会给你错误;严格的警告是非常有用的,可以节省很多挫折。
也许您正在寻找这样的语法:
设置样式
#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
感谢Sulthan,“Style1”代码的外观如何?这只是无论我把它放入大括号吗? –
可以有任何东西。编译期间,只编译一个块,其他块不在那里。我会举一个例子。 – Sulthan
谢谢Rob。这听起来很健壮。我将寻找类似的代码示例。 –
我最好的办法是使用单例,并将颜色和一切定义为一个xml(plist)文件。如果您希望用户在运行时更改样式,则不能使用预处理器。如果你想要不同风格的不同应用程序版本,我推荐预处理器。 – Sulthan
我认为这对我来说是最好的解决方案,因为我希望人们能够在运行时更改设置。我创建了xml文件,所以我只需要解析它,然后完成。非常感谢你们所有人。我希望我能够将你们全部标记为解决了我的问题。我已经注意到你们了。大卫 –