Ios 目标C中的开关箱问题

Ios 目标C中的开关箱问题,ios,switch-statement,Ios,Switch Statement,这是我在教程中遵循的代码 - (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

这是我在教程中遵循的代码

- (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
结束函数的执行,因此函数结束它输入的第一个案例(因为在每种情况下都有
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
,它将只返回
[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 blackColor]作为我的开关案例中的案例0移动时,为什么会显示错误?在这种情况下,它应该退出函数吗?(因为从技术上讲,随机数是从0..4生成的)如果您将其全部移动(剪切和复制),则可能会收到一个编译器错误,即函数不返回值。如果将
return
移动到
case 0
,则仅当
rand==0
时它才会返回,否则,函数将没有返回值-因此编译器发出警告。