我应该使用if还是switch语句? Objective-C的

时间:2011-12-03 14:01:44

标签: iphone objective-c if-statement switch-statement

我一直在想,但找不到明确的答案。我什么时候应该使用'if'或'switch'语句。什么时候比另一个更好?

例如我可以这样做:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    switch (buttonIndex) {
        case 0:
            //Stuff
            break;

        case 1:
            //Stuff
            break;

        default:
            break;
    }

//OR

    if (buttonIndex == 0) {
        //Stuff
    }
    if (buttonIndex == 1) {
        //Stuff 
    }
}

希望你能提供帮助,这只是一个例子,但我确信在不同的情况下,它会有所不同。

8 个答案:

答案 0 :(得分:13)

在这种情况下,这无关紧要。切换存在的原因是它比if更快。如果你编写一个if ... else if ... else if ...的长代码,它的执行速度会慢于switch,因为if执行迭代搜索(O(n)),而switch执行基于表的查找(O(1))< / p>

答案 1 :(得分:7)

我认为这是一个主观问题。答案取决于你。

对于我自己的代码,我喜欢使用switch语句,因为很明显发生的事情是某些条件的结果,如果条件不同,可以做其他事情。

但如果switch case:语句下面的代码相当冗长或复杂,那么对于我自己的代码,我会做第二件事:if (buttonIndex == 0) {位。

答案 2 :(得分:4)

如果您只检查一个变量是否具有某个值(buttonIndex == 1)并且对多个值执行此操作,则最好使用switch

但是如果你正在使用一些更复杂的条件(甚至可能包括条件中的函数),那么你应该使用if statements

答案 3 :(得分:3)

我希望代码尽可能接近人类的理解。这就是为什么三种形式的决策(if-then-else,switch-case-default,?:)适合映射三个不同的过程:

  • ...现在,如果有一个frobnicated quibplatz,我们应该......(否则......应该完成)if的映射
  • ...现在基于quibplatz值,我们应该......如果它是0,...如果它是1(,......如果它们都不是)如果是switch
  • 的映射
  • ...我们使用...或......基于这样的事实,如果......持有?:的映射

因此,请使用映射到您认为实际决策方式的方式。

当然,应该强调 ......的许多场景中适当的OO解决方案......我们这样做......我们这样做......这样for ...和这种方式... ,经常使用switch(但它也适用于某些if)是不使用这些结构并将其替换为多态。手动决策只应在有真正决策时进行,而不是伪造(逻辑)多态。

答案 4 :(得分:1)

切换语句比嵌套的if语句更快。而已。

答案 5 :(得分:0)

Switch就像if elseif一样。太多Switchif elseif会使您的代码难以阅读和理解。但没有任何功能问题。

答案 6 :(得分:-1)

这取决于你想在里面做什么。 请记住,你无法在switch语句中分配新对象

答案 7 :(得分:-3)

如果'if'和'switch'是如此邪恶,它们应该从现代编程语言中删除。事实是他们仍然存在。我认为关键是我们应该尽力使我们的代码正确有效地工作,易于理解和维护。 OOP只是编写程序的一种方式,我们不应该为纯OOP编写程序。所以这确实是一个主观问题。

相关问题