objective C 中的开关盒问题
Switch case issue in objective C
这是我在教程中跟进的代码
- (UIColor *) randomColor {
int rand = arc4random_uniform(5);
NSLog(@"Num is %d",rand);
switch(rand){
case 1 : return [UIColor greenColor];
case 2 : return [UIColor blueColor];
case 3 : return [UIColor orangeColor];
case 4 : return [UIColor purpleColor];
}
return [UIColor blackColor];
}
这是教程中的确切代码,据我所知,如果 switch 语句没有 break 语句,它应该失败并应该执行所有情况,但它似乎没有发生,它只是自己爆发。是因为 UIColor 还是我遗漏了一些明显的东西?
return
keyword 结束一个函数的执行,所以你的函数结束它进入的第一个 case(因为你在每个 case 中都有 return
)
快速修复:
- (UIColor *) randomColor {
int rand = arc4random_uniform(5);
NSLog(@"Num is %d",rand);
UIColor* colorToReturn;
switch(rand){
case 1 : colorToReturn= [UIColor greenColor];
case 2 : colorToReturn=[UIColor blueColor];
case 3 : colorToReturn=[UIColor orangeColor];
case 4 : colorToReturn=[UIColor purpleColor];
}
return colorToReturn;
}
return
语句使函数停止执行。因此,如果 int rand = 1
,它只会 return [UIColor greenColor]
并且函数将停止。这是正确的代码:
- (UIColor *)randomColor {
int rand = arc4random_uniform(5);
UIColor *color;
switch(rand) {
case 1 : color = [UIColor greenColor];
case 2 : color = [UIColor blueColor];
case 3 : color = [UIColor orangeColor];
case 4 : color = [UIColor purpleColor];
default : color = [UIColor blackColor];
}
return color;
}
这是我在教程中跟进的代码
- (UIColor *) randomColor {
int rand = arc4random_uniform(5);
NSLog(@"Num is %d",rand);
switch(rand){
case 1 : return [UIColor greenColor];
case 2 : return [UIColor blueColor];
case 3 : return [UIColor orangeColor];
case 4 : return [UIColor purpleColor];
}
return [UIColor blackColor];
}
这是教程中的确切代码,据我所知,如果 switch 语句没有 break 语句,它应该失败并应该执行所有情况,但它似乎没有发生,它只是自己爆发。是因为 UIColor 还是我遗漏了一些明显的东西?
return
keyword 结束一个函数的执行,所以你的函数结束它进入的第一个 case(因为你在每个 case 中都有 return
)
快速修复:
- (UIColor *) randomColor {
int rand = arc4random_uniform(5);
NSLog(@"Num is %d",rand);
UIColor* colorToReturn;
switch(rand){
case 1 : colorToReturn= [UIColor greenColor];
case 2 : colorToReturn=[UIColor blueColor];
case 3 : colorToReturn=[UIColor orangeColor];
case 4 : colorToReturn=[UIColor purpleColor];
}
return colorToReturn;
}
return
语句使函数停止执行。因此,如果 int rand = 1
,它只会 return [UIColor greenColor]
并且函数将停止。这是正确的代码:
- (UIColor *)randomColor {
int rand = arc4random_uniform(5);
UIColor *color;
switch(rand) {
case 1 : color = [UIColor greenColor];
case 2 : color = [UIColor blueColor];
case 3 : color = [UIColor orangeColor];
case 4 : color = [UIColor purpleColor];
default : color = [UIColor blackColor];
}
return color;
}