iOS 开发小常识 白名单遍历筛选展示数据 字符串判空

//** 白名单控制需求:页面数据拿到后,跟隐藏白名单比较,如果在隐藏白名单中则不展示

    // 页面数据(listMArray)
    NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
    // 隐藏白名单(hideWhiteArray)
    NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
    for (NSDictionary *dict in listMArray) {
        if ([hideWhiteArray containsObject:dict[@"name"]]) {
            [listMArray removeObject:dict];
        }
    }
    NSLog(@"筛选后的页面数据:%@", listMArray);
    // 这种方法会crash,这是因为for in遍历的时候不能操作数据源,会报:<__NSArrayM: 0x28336f600> was mutated while being enumerated。
    // 如果把遍历后的结果放到另外一个临时数组中,遍历结束后再从数据源中剔除临时数组,这样显得有点麻烦。


    // 接下里看另外一种方法:for循环。
    NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
    NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
    for (int i = 0; i < listMArray.count; i++) {
        NSDictionary *dict = listMArray[i];
        if ([hideWhiteArray containsObject:dict[@"name"]]) {
            [listMArray removeObject:dict];
        }
    }
    NSLog(@"筛选后的页面数据:%@", listMArray);
    // 筛选后的数据是:@{@"name":@"zhangSan"}, @{@"name":@"wangWu"}

   // emmmmmmmmmmmmmmmmmmmmmmmm
  // 嗯,感觉逻辑没有问题,但是结果,what??
  // 结果不对,卧槽,好好思考一下流程.........
  // 发现是由于数据源个数发生变化后,i角标发生跳位导致,解决方法就是在每次移除数据的时候把i减少一位即可:
    NSMutableArray *listMArray = [NSMutableArray arrayWithObjects:@{@"name":@"zhangSan"}, @{@"name":@"liSi"}, @{@"name":@"wangWu"}, nil];
    NSArray *hideWhiteArray = @[@"liSi", @"wangWu"];
    for (int i = 0; i < listMArray.count; i++) {
        NSDictionary *dict = listMArray[i];
        if ([hideWhiteArray containsObject:dict[@"name"]]) {
            [listMArray removeObject:dict];
            i -= 1;
        }
    }
    NSLog(@"筛选后的页面数据:%@", listMArray);
    // 筛选后的数据是:@{@"name":@"zhangSan"}}
    // 这样就满足了需求,perfect!


    // 清空字符串要使用第二种正确。
    NSString *str = @"";
    if (str) {
        NSLog(@"有值");
    } else {
        NSLog(@"空");
    }
    
    NSString *str = nil;
    if (str) {
        NSLog(@"有值");
    } else {
        NSLog(@"空");
    }

你可能感兴趣的:(iOS 开发小常识 白名单遍历筛选展示数据 字符串判空)