在Obj-C中使用Switch语句

时间:2012-03-30 14:56:26

标签: ios objective-c compiler-errors switch-statement

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

Xcode error

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

为什么在将代码放入case

时会产生错误

2 个答案:

答案 0 :(得分: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;
  }

答案 1 :(得分:12)

问题是在交换机的情况下声明变量。编译器对于仅在执行某些代码时尝试确定范围感到不安。如果你在“失败”案例的内容周围加上括号,那就应该没问题,因为这限制了范围。