用 map 表达互斥逻辑

用 map 表达互斥逻辑

在这个开发周期遇到这样一个需求:

管理员可以给子账号配置权限,有些权限存在互斥不可同时勾选,比如

审核员和代采、审核和采购员不可同时勾选

 

之前同事实现的方式如下:

这样每添加一个互斥关系就要遍历一次,低效且代码繁琐。

   // 审核员和代采、审核和采购员不可同时勾选
    if ([tag isEqualToString:@"审核"] && selected) {
        for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
            if ([dto.rolename isEqualToString:@"采购"] || [dto.rolename isEqualToString:@"代采"]) {
                dto.isSelected = NO;
            }
        }
    }
    if ([tag isEqualToString:@"采购"]) {
        for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
            if ([dto.rolename isEqualToString:@"审核"] && selected) {  /// 审核和采购员不可同时勾选
                dto.isSelected = NO;
            } else if ([dto.rolename isEqualToString:@"代采"] && !selected) { /// 取消采购默认取消代采
                dto.isSelected = NO;
                break;
            }
        }
    }
    /// 选择代采默认选择采购
    if ([tag isEqualToString:@"代采"] && selected) {
        for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
            if ([dto.rolename isEqualToString:@"采购"]) {
                dto.isSelected = YES;
            } else if ([dto.rolename isEqualToString:@"审核"]) { /// 审核员和代采不可同时勾选
                dto.isSelected = NO;
            }
        }
    }

 

考虑到以后可能继续添加互斥关系,在此使用map保存互斥关系,

这样每添加一种互斥关系只需要在map内增加对应的键值对就可以了,

大大简化了逻辑,使代码更加清晰易于维护。

 1     // 审核员和代采、审核和采购员不可同时勾选
 2     // 使用 map 保存 互斥关系 ,k-v 表示 互斥
 3     NSDictionary *dict = @{
 4                            @"审核" : @"采购代采",
 5                            @"代采" : @"审核",
 6                            @"采购" : @"审核"
 7                            };
 8     
 9     NSString *mutex = [dict valueForKey:tag];
10     
11     if (!IsStrEmpty(mutex) && selected) {
12         for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
13             if ([mutex containsString:dto.rolename]) {
14                 dto.isSelected = NO;
15             }
16         }
17     }

 

posted on 2018-09-17 13:10 CodeVector 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值