这是一个重要的区别
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;
}
}
这是我用来避免魔术字符串或时髦的条件逻辑的常见模式。由于枚举返回一个 int 结果,我经常将它们用于路由和决策点。在这里,我为我的不同数据源创建了一个枚举:
typedef enum
{
HoursPickerComponent = 0,
MinutesPickerComponent = 1,
DaysPickerComponent = 2
} MedicationPickerComponents;
然后我的 UIPickerView 组件的委托代码看起来像
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [[self datasourceForComponent:component] count];
}
我觉得这是一个很好的例子,说明如何将开关用于决策点以使代码更具可读性。请注意,我并没有在 case 语句中放置很多逻辑……这样您就可以通过查看它来轻松判断此 switch 语句的意图。如果我有更复杂的代码要运行,我只需将其存入一个方法并从我的 case 语句中调用该方法。