导致此问题的原因:无法从 switch 语句跳转到此案例标签 [重复]
Posted
技术标签:
【中文标题】导致此问题的原因:无法从 switch 语句跳转到此案例标签 [重复]【英文标题】:What is causing this: Cannot jump from switch statement to this case label [duplicate] 【发布时间】: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;
括在一个块中(花括号),您就不能在案例内声明它
【参考方案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 <...> 时偶然发现了这个错误并回答了 - 显然尖括号以同样的方式脱离了解析器。谢了,谢谢!以上是关于导致此问题的原因:无法从 switch 语句跳转到此案例标签 [重复]的主要内容,如果未能解决你的问题,请参考以下文章