Mac开发|NSString与switch的使用

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;
}

使用NSStringswitch语句结合的方式,其实就是将要使用到的字符串到加入到一个数组中,然后再使用数组中的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;
}

你可能感兴趣的:(Mac开发|NSString与switch的使用)