【问题标题】:What is causing this: Cannot jump from switch statement to this case label [duplicate]导致此问题的原因:无法从 switch 语句跳转到此案例标签 [重复]
【发布时间】:2016-04-22 03:52:58
【问题描述】:

这是一个我收到错误的 switch 语句:

        switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchasing:

            // show wait view here
            statusLabel.text = @"Processing...";
            break;

        case SKPaymentTransactionStatePurchased:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            // remove wait view and unlock iClooud Syncing
            statusLabel.text = @"Done!";

            NSError *error = nil;
            [SFHFKeychainUtils storeUsername:@"IAPNoob01" andPassword:@"whatever" forServiceName: kStoredData updateExisting:YES error:&error];

            // apply purchase action  - hide lock overlay and
            [oStockLock setBackgroundImage:nil forState:UIControlStateNormal];

            // do other thing to enable the features

            break;

        case SKPaymentTransactionStateRestored:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            // remove wait view here
            statusLabel.text = @"";
            break;

        case SKPaymentTransactionStateFailed:

            if (transaction.error.code != SKErrorPaymentCancelled) {
                NSLog(@"Error payment cancelled");
            }
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            // remove wait view here
            statusLabel.text = @"Purchase Error!";
            break;

        default:
            break;
    }

最后两种情况,加上默认情况,给我以下错误:

不能从switch语句跳转到这个case标签

我用过很多次switch语句;这是我第一次看到这个。代码已从教程 (here) 中复制,我正在尝试适应我的应用程序。感谢您对此的帮助。标清

【问题讨论】:

  • 您能否尝试将所有case 块的内部放入花括号中,看看是否有任何改变?像这样:apeth.com/iOSBook/ch01.html#EXswitch
  • 如果不将 NSError *error = nil; 括在一个块中(花括号),您就不能在案例内声明它

标签: objective-c switch-statement ios9


【解决方案1】:

C 不是 Swift。如果您使用花括号围绕所有案例内部构造您的 switch 语句,您会更开心,例如 this:

switch (tag) {
    case 1: { // curly braces
        // ...
        break;
    }
    case 2: {  // curly braces
        // ...
        break;
    }
    case 3: {  // curly braces
        // ...
        break;
    }
}

额外的花括号允许你做你不能做的事情。

【讨论】:

  • 难以置信!我无法看到“森林中的树木”。我知道这一点,只是想不出来......感谢马特 SD
  • 我从不在 C 语言中使用 switch 的众多原因之一... :) 陷阱太多了。
  • 我在 switch 语句中使用 C++ reinterpret_cast <...> 时偶然发现了这个错误并回答了 - 显然尖括号以同样的方式脱离了解析器。谢了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
相关资源
最近更新 更多