为什么我不能在文件中放置条件语句来设置全局变量值?

时间:2015-01-05 16:44:29

标签: ios objective-c

我想定义一些变量,我将在视图控制器中使用这些变量来设置字体大小,具体取决于用户是在iphone还是ipad上。到目前为止,我可以定义一个全局浮动没问题。但是,我无法在我的文件中包含任何条件语句。这很好用:

.h文件:

#import <Foundation/Foundation.h>
@interface GlobalDeclarations : NSObject
extern float MyGlobalVariable;
@end

.m文件:

#import "GlobalDeclarations.h"
@implementation GlobalDeclarations
float MyGlobalVariable = 0.0f;
@end

但是我无法修改我的.m文件以包含任何if语句 - 我总是得到同样的错误:

"expected idenitifer or ')'

例如,此版本的.m文件会产生上述错误:

#import "GlobalDeclarations.h"
@implementation GlobalDeclarations
float MyGlobalVariable = 0.0f;
if(MyGlobalVariable > 2.0f)
{ 
   NSLog(@"inside if statement");
}

@end

即使我只是写了if(TRUE)......

之类的东西,我也会收到错误

如何在这样的附件中有条件地定义全局变量? if语句有什么问题?感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

对于变量,您只能将声明和有限的初始化表达式作为文件级别。如果您需要更复杂的初始化,则必须将代码放在方法中,而Objective-C支持方法+ initialize以进行类范围的设置。

将您的代码重写为:

#import "GlobalDeclarations.h"

@implementation GlobalDeclarations

float MyGlobalVariable = 0.0f;

+ initialize
{
   if(MyGlobalVariable < 2.0f)
   { 
      NSLog(@"inside if statement");
   }
}

@end

在第一次使用该类之前,将调用+ initialize方法。

注意:对于更加模糊的情况,还有一个+ load方法甚至比+ initialize更早被调用,并且有一些属性可用于标记以类似方式调用的任何函数。