Bài viết phổ biến của tác giả
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的项目中有很多 if 语句、嵌套 if 语句和 if-else 语句,我正在考虑将它们更改为 switch 语句。其中一些将具有嵌套的 switch 语句。我知道就编译而言,switch 语句通常更快。我的问题是,通常更喜欢使用哪个?
1 Câu trả lời
这是一个重要的区别
switch 语句采用具有整数结果的表达式,并将其与具有常量值 的 case 语句相匹配。 Case 语句不能是表达式...因此当您需要根据一组确定的值计算整数结果时,switch 语句就有意义了。
IMO,嵌套的 switch 语句可能会给您的代码增加困惑……它不仅可读性差。
这是我使用 switch 语句为 UIPickerView 组件返回适当数据源的示例
- (NSMutableArray *) datasourceForComponent:(NSInteger)component
{
switch (component) {
case HoursPickerComponent:
return _hours;
phá vỡ;
case MinutesPickerComponent:
return _mins;
phá vỡ;
case DaysPickerComponent:
return _days;
phá vỡ;
mặc định:
return nil;
phá vỡ;
}
}
这是我用来避免魔术字符串或时髦条件逻辑的常用模式。由于枚举返回一个 int 结果,我经常将它们用于路由和决策点。在这里,我为不同的数据源创建了一个枚举:
typedef enum
{
HoursPickerComponent = 0,
MinutesPickerComponent = 1,
DaysPickerComponent = 2
} MedicationPickerComponents;
然后我的 UIPickerView 组件的委托(delegate)代码看起来像
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [[self datasourceForComponent:component] count];
}
我觉得这是一个很好的例子,说明如何将开关用于决策点以提高代码的可读性。请注意,我没有在 case 语句中加入很多逻辑……这样您就可以通过查看轻松地判断出此 switch 语句的意图。如果我要运行更复杂的代码,我会在一个方法中将其 stub ,然后从我的 case 语句中调用该方法。
关于ios - Switch 语句 VS If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11455774/
Tôi là một lập trình viên xuất sắc, rất giỏi!