ePa*_*oal 0 if-statement objective-c switch-statement
我无法理解为什么这适用于if声明而不是switch:
if ((int)typeOfHall == 1) {//LocalHall
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Game"];
NSPredicate *p = [NSPredicate predicateWithFormat:@"player_id == %@ ",[[NSUserDefaults standardUserDefaults] valueForKey:@"LoggedUserId"]];
request.predicate = p;
}
Run Code Online (Sandbox Code Playgroud)
下面的代码不起作用(编译错误:( Expected expression在NSFetchRequest上)):
switch ((int)typeOfHall) {
case 1:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Game"]; //Error Expected expression
NSPredicate *p = [NSPredicate predicateWithFormat:@"player_id == %@ ",[[NSUserDefaults standardUserDefaults] valueForKey:@"LoggedUserId"]];
request.predicate = p;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样.我认为switch和if语句是相似的,但在这种情况下它似乎是非常不同的.
你知道为什么会这样吗?
case如果要在那里声明任何变量,则需要一个单独的范围:
switch ((int)typeOfHall) {
case 1:
{ /* Introduce a scope ... */
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Game"];
NSPredicate *p = [NSPredicate predicateWithFormat:@"player_id == %@ ",[[NSUserDefaults standardUserDefaults] valueForKey:@"LoggedUserId"]];
request.predicate = p;
break;
} /* ... that ends here. */
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
旁注:如果LocalHall是枚举值,则代码在没有强制转换的情况下更具可读性:
switch (typeOfHall) {
case LocalHall:
// ...
Run Code Online (Sandbox Code Playgroud)