具有条件值的Objective C中的常量

时间:2012-11-22 00:13:15

标签: objective-c ios xcode

我使用advice in this question在我的Xcode项目中设置了一些常量,它运行得很好。但是,现在,我想为这两个常量设置一个不同的值,具体取决于它是iPad还是iPhone。

这是我的Constants.h文件:

extern integer_t const kFontSize;
extern integer_t const kFontSizeMicro;

和我的.m:

integer_t const kFontSize = 16;
integer_t const kFontSizeMicro = 11;

现在我想根据.pch文件中的#define宏设置更改这些值。但这不起作用:

if (IS_IPAD) {
    integer_t const kFontSize = 25;
    integer_t const kFontSizeMicro = 15;
}

我得到的错误是“预期的标识符或”(“if”。

在这种情况下,任何人都知道如何允许条件语句吗?

2 个答案:

答案 0 :(得分:4)

C语言的if语句不能在函数体外部用来控制像这样的全局声明。您可以改为使用预处理器的#if

#if (IS_IPAD)
    integer_t const kFontSize = 25;
    integer_t const kFontSizeMicro = 15;
#else
    integer_t const kFontSize = 20;
    integer_t const kFontSizeMicro = 12;
#endif

这与使用#define - d常量没有太大区别。如果你想在运行时设置常量,比如在初始化期间,你需要从声明中删除const,并将常规if放入初始化函数中 - 例如, application:didFinishLaunchingWithOptions:

答案 1 :(得分:3)

你也可以使用三元运算符,它会给你这样的东西:

integer_t const kFontSize = (IS_IPAD)? 25 : 20;
integer_t const kFontSizeMicro = (IS_IPAD)? 15 : 12;

这就像一个if(IS_IPAD){kFontSize = 25} else {kFontsize = 20}声明

如果你在计算中使用常量,你可能需要把它放在()之间,否则你可能会因为操作优先级问题而有一些警告。

所以类似:(kFontSize)* 2 + 1