“if”条件不起作用

时间:2011-02-01 05:21:33

标签: objective-c cocoa if-statement

由于某种原因,在if条件中声明的变量得到一个未使用的变量,而稍后将要使用的变量得到未声明的变量。为什么会发生这种情况,以及解决问题的方法是什么。

NSString *name = [NSString stringWithFormat:@"Josh"];

if ([name isEqualToString:@"Josh"])
{
    NSString *greeting = [NSString stringWithFormat:@"Hello Josh"]; //Warning: Unused variable 'greeting'
}
else 
{
    NSString *greeting = [NSString stringWithFormat:@"Hello %@", name]; //Warning: Unused variable 'greeting'
}
NSLog (@"%@", greeting); //Error: 'greeting' undeclared

2 个答案:

答案 0 :(得分:9)

您一定要阅读variables scope

这是一个正确的代码:

NSString *name = [NSString stringWithFormat:@"Josh"];
NSString *greeting = nil;

if ([name isEqualToString:@"Josh"])
{
    greeting = [NSString stringWithFormat:@"Hello Josh"];
}
else 
{
    greeting = [NSString stringWithFormat:@"Hello %@", name];
}

NSLog (@"%@", greeting);

答案 1 :(得分:4)

通过在greetingif块中声明这些else变量,您只能在该范围内定义它们。您需要在greeting / if块之前定义else,如下所示:

NSString *name = @"Josh";
NSString *greeting = nil;

if ([name isEqualToString:@"Josh"])
{
    greeting = @"Hello Josh";
}
else 
{
    greeting = [NSString stringWithFormat:@"Hello %@", name];
}

NSLog (@"%@", greeting);

作为一般规则:当您在{ + }控制块内声明变量时,该变量在该块之外将不可见。