有人可以解释目标C中的切换

时间:2013-07-11 00:19:38

标签: objective-c switch-statement

我刚开始学习Objective C而且我不懂开关。 有人可以向我解释一下吗?

由于

2 个答案:

答案 0 :(得分:1)

switch语句用于代替if else语句

例如

int a =4;

if(a == 1)
    doSomething();
else if(a == 2)
    doSomethingElse();
else if(a == 3)
    BLAH();
else
     CaseUnaccountedFor();

相当于

int a =4;

switch(a) {
case 1:
    doSomething();
    break;
case 2:
    doSomethingElse();
    break;
case 3:
    BLAH();
    break;
default:
   CaseUnaccountedFor();
    break;
}

如果其中一个案例匹配,则不会自动退出switch语句,这就是为什么在每个案例结束时都有一个break语句。除了您明确列出的情况之外,案例'default'与其他案例相匹配。

答案 1 :(得分:0)

(Objective-)C(以及C系列的其他成员)中的switch语句是计算goto (或 jump / * branch *)。< / p>

一些标量类型的表达式 - 基本上是一个整数类型或一个简单地转换为整数的类型 - 被评估,其值用于选择标签来分支在一段代码中。

每个标签都是一个常数值,由case <value>:表示;或default:,如果表达式的值不存在标签,则使用break;。标签本身可以在代码块内以任何顺序出现。

一旦发生跳转,执行流将继续正常通过代码块的其余部分,包括遇到的任何标签。从标签前面的一段代码传递到另一个标签的下一段代码前缀通常被称为“通过”。

可以使用break语句来防止掉落。这是一个跳转到代码块末尾的分支语句。通过在代码块中每个标签前缀语句组的末尾使用一个switch,形成一种多项选择构造 - switch中表达式的值选择一个,并且只有一个标签前缀语句组。这是一种非常常见的模式,实际上其他一些编程语言也明确地提供了这种模式,并且根本不支持C系列的计算goto模型。

由于if中只有一个代码块,单个标签前缀语句组不能包含仅对该组本地的变量声明 - 任何组中任何声明的范围都是整个代码块。此问题通常会将首次使用的用户视为看似非常接近的并行,then / else / case value: { sequence of statements including declarations - scope limited to this block } break; 语句,包含两个语句块,因此范围变量声明不会扩展到两个分支。

声明范围问题可以简单地通过将一个标签组括在一个块(一个支撑的语句序列)中来解决,给出大纲:

switch

使用此模型可提供与其他语言最接近的多选选择语句。

最后,if语句通常更有效,并且是then / else / {{1}}语句的等效序列 - 无论是执行还是可读性。

HTH。