Условие "если" не работает - PullRequest
0 голосов
/ 01 февраля 2011

По какой-то причине переменная, объявленная в условии 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 ]

9 голосов
/ 01 февраля 2011

Обязательно прочитайте о области видимости переменных .

Вот правильный код:

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);
4 голосов
/ 01 февраля 2011

Объявляя эти 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);

Как правило: когда вы объявляете переменную в блоке управления { + }, переменная не будет видна вне этого блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...