有一个我无法弄清楚的最奇怪的问题。在下面的方法中,没有输入switch语句。当我打印出warningAlertViewType
的值时,它是正确的,但switch语句由于某种原因没有激活。我之前使用过相同的方法进行切换,并且工作正常。
有谁知道可能导致这种情况的原因?
+ (WarningAlertView*) warningAlertViewWithType:(WarningAlertViewType)warningAlertViewType
{
WarningAlertView *warningAlertView = nil;
NSLog(@"WarningAlertViewType1: %d", warningAlertViewType);
switch (warningAlertViewType)
{
NSLog(@"Test1");
case WarningAlertViewTypeExit: warningAlertView = [[ExitWarningAlertView alloc] init]; break;
case WarningAlertViewTypeFacebook: warningAlertView = [[FacebookWarningAlertView alloc] init]; break;
case WarningAlertViewTypeDelete: warningAlertView = [[DeleteWarningAlertView alloc] init]; break;
case WarningAlertViewTypePhotoLibrary: warningAlertView = [[PhotoLibraryWarningAlertView alloc] init]; break;
case WarningAlertViewTypeBack: warningAlertView = [[BackWarningAlertView alloc] init]; break;
default: break;
}
NSLog(@"Test2");
return [warningAlertView autorelease];
}
答案 0 :(得分:1)
将您的switch语句更改为以下内容
switch (warningAlertViewType) {
case WarningAlertViewTypeExit:
NSLog(@"WarningAlertViewTypeExit");
warningAlertView = [[ExitWarningAlertView alloc] init];
break;
case WarningAlertViewTypeFacebook:
NSLog(@"WarningAlertViewTypeFacebook");
warningAlertView = [[FacebookWarningAlertView alloc] init];
break;
case WarningAlertViewTypeDelete:
NSLog(@"WarningAlertViewTypeDelete");
warningAlertView = [[DeleteWarningAlertView alloc] init];
break;
case WarningAlertViewTypePhotoLibrary:
NSLog(@"WarningAlertViewTypePhotoLibrary");
warningAlertView = [[PhotoLibraryWarningAlertView alloc] init];
break;
case WarningAlertViewTypeBack:
NSLog(@"WarningAlertViewTypeBack");
warningAlertView = [[BackWarningAlertView alloc] init];
break;
default:
NSLog(@"default");
break;
}
我实际上是这样严格命名的粉丝。然后人们可以使用宏(有些人讨厌,我知道)来大大缩短这一点。
switch (warningAlertViewType) {
#define CASE(_type) \
case WarningAlertViewType ## _type: \
NSLog(@"WarningAlertViewType" #_type); \
warningAlertView = [[_type ## WarningAlertView alloc] init]; \
break
CASE(Exit);
CASE(Facebook);
CASE(Delete);
CASE(PhotoLibrary);
CASE(Back);
default:
NSLog(@"default");
break;
#undef CASE
}