Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 这段代码使用了switch case和if-else哪个更好?_Ios_Objective C - Fatal编程技术网

Ios 这段代码使用了switch case和if-else哪个更好?

Ios 这段代码使用了switch case和if-else哪个更好?,ios,objective-c,Ios,Objective C,代码 && 我想知道在很多方面哪一个更好代码行,运行效率 我喜欢斯威夫特的开关盒……使用开关/盒。这样做更清楚,代码更可读。此外,您总是能够捕捉到默认情况,这使得算法具有确定性。切换情况在性能上总是更好、效率最高,因为所有条件都是在编译时静态分配的,不需要运行时计算 为了让代码更清晰,您也可以这样做 switch (section) { case 0: return 15; case 1: return 10; case 2:

代码

&&

我想知道在很多方面哪一个更好代码行,运行效率


我喜欢斯威夫特的开关盒……

使用开关/盒。这样做更清楚,代码更可读。此外,您总是能够捕捉到默认情况,这使得算法具有确定性。

切换情况在性能上总是更好、效率最高,因为所有条件都是在编译时静态分配的,不需要运行时计算

为了让代码更清晰,您也可以这样做

switch (section) {
    case 0:
        return 15;
    case 1:
        return 10;
    case 2:
        return 10;
    case 3:
        return 10;
    case 4:
        return 15;
    default:
        break;
}
return 0;

switch case更好,因为它是可读的,正如您在编译时在switch case中创建了一种查找表一样。所以不需要计算和计算。

我倾向于在可能的时候使用开关。速度优化可以是真实的,但对于小测试,我真的不认为它有什么意义。在我看来,真正的优势在于切换必须是彻底的:您必须使用默认值catch来处理所有可能的值

此外,Swift极大地提高了开关的可读性,因为您不必添加break语句来避免下一种情况的失败,并且您可以将您的条件分组到同一行:

switch (section) {
    case 0:
    case 4:
        return 15;
    case 1:
    case 2:
    case 3:
        return 10;
    default:
    return 0;
        break;
}

编译器在优化switch语句方面似乎优于if语句


编译器不知道if语句的求值顺序对您是否重要,因此无法执行任何优化。您可以在if语句中调用方法,从而影响变量。通过switch语句,它知道可以同时计算所有子句,并且可以将它们按最有效的顺序排列。

switch更好,用例范围更广,正如@Michaël Azevedo所提到的


当编译器点击switch语句时,它会创建一个包含所有可能条件的查找表。而在if-else类型的验证中,编译器必须在每次执行if、else-if、else..时计算条件

当选项数量相对较少时,切换效果更好。if语句更难读取,创建NSArray只是为了查看列表中是否有某个值,这会带来很大的开销。如果有几十个或更多选项,由于可读性,NSArray方法会更好。
switch (section) {
    case 0:
    case 4:
        return 15;
    case 1:
    case 2:
    case 3:
        return 10;
    default:
    return 0;
        break;
}
switch (section) {
case 0, 4:
    return 15
case 1...3:
    return 10
default:
    return 0
}