if语句后变量不起作用

Ber*_*hot -2 if-statement objective-c parameter-passing

这是我目前的代码,

CGRect screenRect = [[UIScreen mainScreen] bounds];    
CGRect *FullViewRect = NULL;
if (screenRect.size.height == 568.0f) // iPhone 5
   {CGRect FullViewRect = CGRectMake(0, 0, 320, 568);}
else
   {CGRect FullViewRect = CGRectMake(0, 0, 320, 480);}

UILabel *Count3 = [[UILabel alloc] initWithFrame: FullViewRect];
Count3.backgroundColor = [UIColor blueColor];
[self.view addSubview:Count3];
Run Code Online (Sandbox Code Playgroud)

但是Count3不可见?没有给出错误,但FullViewRect没有任何价值.

小智 5

我想知道这是如何编译的.它不应该.

UILabel *Count3 = [[UILabel alloc] initWithFrame: FullViewRect];
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为FullViewRect是a CGRect *,但方法需要a CGRect.(为什么你会假设而不是阅读文档?)

此外,您将在if语句的分支内重新声明该变量.您的代码需要(变量名称固定为以小写字母开头):

CGRect fullViewRect;
if (screenRect.size.height == 568.0f) {
    fullViewRect = CGRectMake(0, 0, 320, 568);
} else {
    fullViewRect = CGRectMake(0, 0, 320, 480);
}
Run Code Online (Sandbox Code Playgroud)

但是,这是一个过于基本的东西.如果你不理解这一点,你应该学习C并且不尝试制作iOS应用程序.

另一个错误是:

if (screenRect.size.height == 568.0f)
Run Code Online (Sandbox Code Playgroud)

永远不要试图比较像这样的浮点数,因为它们并不精确.使用这样的东西代替:

if (screenRect.size.height > 500.0f)
Run Code Online (Sandbox Code Playgroud)

或类似的.