适用于iOS/Objective-C的switch语句

Mo *_*osa 15 objective-c switch-statement ios

假设我有一个包含五种情况的switch语句,但只调用了两种真正的方法,如下所示:

switch (condition) {
    case conditionOutcome1: 

        [self firstMethod];
        break;

    case conditionOutcome2: 
        [self secondMethod];
        break;

    case conditionOutcome3:

        [self firstMethod];
        break;

    case conditionOutcome4: 

        [self firstMethod];

        break;
    case conditionOutcome5: 

        [self secondMethod];
        break;

    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

将案件分组是否安全,如此?

    switch (condition) {

    case conditionOutcome1:
    case conditionOutcome3:
    case conditionOutcome4: 

        [self firstMethod];
        break;

    case conditionOutcome2: 
    case conditionOutcome5: 

        [self secondMethod];
        break;


    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我之前从未在objective-c中使用它,所以我想通过保存几行代码来确保我没有引起任何问题.

谢谢!

Rui*_*res 11

只是添加到其他答案,它被称为一个秋天,你可以在这里阅读它.

  • 当您将警告设置为 *paranoid* :) 时,您还可以使用 `[[clang::fallthrough]]` 来表明明确的意图……在 [llvm 博客](http://blog.llvm.org/2013 /09/clang-warnings.html)和[clang文档](http://clang.llvm.org/docs/LanguageExtensions.html#non-standard-c-11-attributes)中的技术细节 (2认同)

Fog*_*ter 9

是的,这样做很好.

我之前用过它.它会停止重复的代码.


Ano*_*dya 9

是100%安全使用

开关(条件){

case conditionOutcome1:
case conditionOutcome3:
case conditionOutcome4: 

    [self firstMethod];
    break;

case conditionOutcome2: 
case conditionOutcome5: 

    [self secondMethod];
    break;


default:
    break; }
Run Code Online (Sandbox Code Playgroud)

对于case具有相同动作集(重复代码)的多个s,总是使用它.

因为所有的cases将被执行直到break遇到.

  • 不要用另一个回答说"是",但只是添加一个注释.您可能希望通过在案例之间添加注释来在代码中记录这一点.一个简单的`/*FALLTHROUGH*/`稍后会提醒你,你确实打算写它.[BSD风格指南](http://www.freebsd.org/cgi/man.cgi?query=style&sektion=9)需要它. (2认同)