在Obj-C中使用Switch语句

Sam*_*cer 6 compiler-errors objective-c switch-statement ios

下面是一个Switch/Case语句,当无法发送电子邮件时显示错误消息.在大多数情况下,一切似乎都是正确的,但是当我UIAlertView在Switch语句中放入一个Xcode时出错:

Xcode错误

switch (result) {
    case MFMailComposeResultCancelled:
        NSLog(@"Result: Mail sending canceled");
        break;
    case MFMailComposeResultFailed:
        NSLog(@"Result: Mail sending failed");
        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Sending Failed"
                                                          message:@"The email could not be sent."
                                                         delegate:nil
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil];

        [message show];
        break;
    default:
        NSLog(@"Result: Mail not sent");
        break;
}
Run Code Online (Sandbox Code Playgroud)

为什么在我将代码置于其中时会产生错误case

ban*_*isa 14

把它放在括号中:

case MFMailComposeResultFailed: {
    NSLog(@"Result: Mail sending failed");
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Sending Failed"
                                                      message:@"The email could not be sent."
                                                     delegate:nil
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];

    [message show];
    break;
  }
Run Code Online (Sandbox Code Playgroud)


Phi*_*lls 12

问题是在交换机的情况下声明变量.编译器对于仅在执行某些代码时尝试确定范围感到不安.如果在"失败"案例的内容周围放置括号,则应该没问题,因为这会限制范围.