切换语句VS If语句

Mik*_*rds 2 if-statement switch-statement ios

我的项目中有很多if语句,嵌套if语句和if-else语句,我正在考虑将它们更改为switch语句.其中一些将具有嵌套的switch语句.我知道在编译方面,switch语句通常更快.我的问题是,通常更喜欢使用哪个?

jer*_*rts 7

这是一个重要的区别

switch语句接受带有整数结果表达式,并将其与具有常量值的case语句匹配.case语句不能是表达式...所以当你需要从一组确定的值中计算整数结果时,switch语句才有意义.

IMO,嵌套的switch语句可能会给你的代码增加混乱......它不仅仅是可读的.

这是我使用switch语句返回UIPickerView组件的相应数据源的示例

- (NSMutableArray *) datasourceForComponent:(NSInteger)component
{
    switch (component) {

        case HoursPickerComponent: 
            return _hours;
            break;

        case MinutesPickerComponent:            
            return _mins;
            break;

        case DaysPickerComponent:            
            return _days;
            break;

        default:
            return nil;
            break;

   }    
}
Run Code Online (Sandbox Code Playgroud)

这是我用来避免魔术字符串或时髦条件逻辑的常见模式.由于枚举返回int结果,我经常将它们用于路由和决策点.在这里,我为不同的数据源创建了一个枚举:

typedef enum
{
    HoursPickerComponent = 0,

    MinutesPickerComponent = 1,

    DaysPickerComponent = 2

} MedicationPickerComponents;
Run Code Online (Sandbox Code Playgroud)

然后我的UIPickerView组件的委托代码看起来像

- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component
{
    return [[self datasourceForComponent:component] count];
}
Run Code Online (Sandbox Code Playgroud)

我觉得这是一个很好的例子,说明如何使用开关作为决策点,使代码更具可读性.请注意,我没有在case语句中添加很多逻辑......这样你就可以通过查看它来轻松地告诉这个switch语句的意图.如果我有更复杂的代码要运行,我会在方法中将其存根并从我的case语句中调用该方法.