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;
}