OC中的NSString
是无法直接带入switch语句
中使用的,但是相比于使用if... else if语句
进行判断,个人还是偏向于使用switch语法
进行编码,所以为了让NSString
可以和switch语句
结合使用,可以使用一种间接的方法
这边我会以一个例子举例,比如当我要处理多个NSComboBox
的内容的时候,原先使用if...else if语句
的代码如下所示(具体的NSComboBox的实现方式请看其它博主的详情教程,这边只贴出一部分代码)
- (void)viewDidLoad {
[super viewDidLoad];
self.yearArr = @[@"1994",@"1995",@"1996"];
self.monthArr = @[@"1",@"2",@"3"];
self.dayArr = @[@"29",@"30",@"31"];
}
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)comboBox {
NSInteger num = 0;
if ([comboBox.identifier isEqualToString:@"year"]) {
num = [self.yearArr count];
} else if ([comboBox.identifier isEqualToString:@"month"]) {
num = [self.monthArr count];
} else if ([comboBox.identifier isEqualToString:@"day"]) {
num = [self.dayArr count];
}
return num;
}
- (nullable id)comboBox:(NSComboBox *)comboBox objectValueForItemAtIndex:(NSInteger)index {
NSString *content;
if ([comboBox.identifier isEqualToString:@"year"]) {
content = [self.yearArr objectAtIndex:index];
} else if ([comboBox.identifier isEqualToString:@"month"]) {
content = [self.monthArr objectAtIndex:index];
} else if ([comboBox.identifier isEqualToString:@"day"]) {
content = [self.dayArr objectAtIndex:index];
}
return content;
}
使用NSString
与switch语句
结合的方式,其实就是将要使用到的字符串到加入到一个数组中,然后再使用数组中的indexOfObject
方法获取到一个NSUInteger
变量,这样就可以配合switch语句
了
- (void)viewDidLoad {
[super viewDidLoad];
self.yearArr = @[@"1994",@"1995",@"1996"];
self.monthArr = @[@"1",@"2",@"3"];
self.dayArr = @[@"29",@"30",@"31"];
self.comboBoxID = @[@"year",@"month",@"day"];
}
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)comboBox {
NSInteger num = 0;
NSUInteger strIndex = [self.comboBoxID indexOfObject:comboBox.identifier];
switch (strIndex) {
case 0:
num = [self.yearArr count];
break;
case 1:
num = [self.monthArr count];
break;
case 2:
num = [self.dayArr count];
break;
}
return num;
}
- (nullable id)comboBox:(NSComboBox *)comboBox objectValueForItemAtIndex:(NSInteger)index {
NSString *content;
NSUInteger strIndex = [self.comboBoxID indexOfObject:comboBox.identifier];
switch (strIndex) {
case 0:
content = [self.yearArr objectAtIndex:index];
break;
case 1:
content = [self.monthArr objectAtIndex:index];
break;
case 2:
content = [self.dayArr objectAtIndex:index];
break;
}
return content;
}
再进一步,switch语句
中的这些0、1、2的数字,这种方式的编码可读性不是太好,所以可以再结合枚举
的方式,首先先写个枚举变量comboBoxIDType
,如下所示:
typedef NS_ENUM(NSUInteger, comboBoxIDType) {
year = 0,
month = 1,
day = 2
};
其它的代码小改即可,此次只贴一部分,其余相似的代码一并照样改即可:
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)comboBox {
NSInteger num = 0;
comboBoxIDType id = [self.comboBoxID indexOfObject:comboBox.identifier];
switch (id) {
case year:
num = [self.yearArr count];
break;
case month:
num = [self.monthArr count];
break;
case day:
num = [self.dayArr count];
break;
}
return num;
}