由于某种原因,在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
答案 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)
通过在greeting
和if
块中声明这些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);
作为一般规则:当您在{
+ }
控制块内声明变量时,该变量在该块之外将不可见。