码迷,mamicode.com
首页 > 其他好文 > 详细

你想消除switch case 或者if语句吗?

时间:2015-04-16 19:29:58      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

使用场景:
服务器传来一组数据,比如app里的通知消息,其中type值表示该数据类型
举个栗子~为type和测试文本类型(displayText),displayText用在界面显示

  @"test1":@"测试类型1",

  @"test2":@"测试类型2",

  @"test3":@"测试类型3",

  @"test4":@"测试类型4",

  @"test5":@"测试类型5",

  @"test6":@"测试类型6",

  @"test7":@"测试类型7"

 你是否会想到使用if来判断某个type来获取所对应的文本类型?

或者是定义一些枚举类型 判断type,然后根据枚举通过switch来返回对应的文本类型?

typedef NS_ENUM(NSInteger, StringType){
    StringType_Test1,
    StringType_Test2,
    StringType_Test3,
    StringType_Test4,
    StringType_Test5,
    StringType_Test6,
    StringType_Test7,
    StringType_Unknown,    //未知
};

 

#pragma mark -
- (StringType)checkMessageType:(NSString *)typeName{
    if ([typeName isEqualToString:@"test1"]){
        return StringType_Test1;
    }else if ([typeName isEqualToString:@"test2"]){
        return StringType_Test2;
    }
    else if ([typeName isEqualToString:@"test3"]){
        return StringType_Test3;
    }
    else if ([typeName isEqualToString:@"test4"]){
        return StringType_Test4;
    }
    else if ([typeName isEqualToString:@"test5"]){
        return StringType_Test5;
    }
    else if ([typeName isEqualToString:@"test6"]){
        return StringType_Test6;
    }
    else if ([typeName isEqualToString:@"test7"]){
        return StringType_Test7;
    }
    return StringType_Unknown;
}
- (NSString *)checkTypeName:(StringType)type{
    switch (type) {
        case StringType_Test1:{
            return @"测试消息1";
            break;
        }
        case StringType_Test2:{
            return @"测试消息2";
            break;
        }
        case StringType_Test3:{
            return @"测试消息3";
            break;
        }
        case StringType_Test4:{
            return @"测试消息4";
            break;
        }
        case StringType_Test5:{
            return @"测试消息5";
            break;
        }
        case StringType_Test6:{
            return @"测试消息6";
            break;
        }
        case StringType_Test7:{
            return @"测试消息7";
            break;
        }
            
        default:
            break;
    }
    
    return @"";
}
//此时 查找对应type的displayText代码
NSString *typeIfSwitch = [self checkTypeName: [self checkMessageType:type]];

 

那么,怎么能够消除if else 或者switch?

前提 只是需要根据type找到对应的displayText

提示 type总是不同的,可以说是

说到唯一 你是否有想到一个东西? 字典?对,就是字典,因为字典的key唯一,使用字典,只需要找到对应key的value就是displayText啦~

这样,什么if else switch 就都不需要啦,有代码有真相

 NSDictionary *typeDic = @{
                          @"test1":@"测试消息1",
                          @"test2":@"测试消息2",
                          @"test3":@"测试消息3",
                          @"test4":@"测试消息4",
                          @"test5":@"测试消息5",
                          @"test6":@"测试消息6",
                          @"test7":@"测试消息7",
                          }
NSString *typeDictionary = typeDic[stringtxt];

 是不是嗖的代码就瘦身好多,而且好直观的说

 

----------------------------------------------------------------------------------------

接着,给大家试验一下这两种方法 所花费的时间

----------------------------------------------------------------------------------------

typedef void(^NSLogTime)();

//查看NSLogTime里的代码所花费的时间 - (void)log:(NSLogTime)log{ if (log) { CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); log(); CFAbsoluteTime end__ = CFAbsoluteTimeGetCurrent(); NSLog(@"耗时 %f",end__ - start); } }

 技术分享

 技术分享

字典花费的时间竟然会更少

再更换一个type

技术分享i

字典花费的时间基本一致,而if 之类的 会随着分支条件增多花费的时间也更多,下面是查找type对应的时间

技术分享

 

你想消除switch case 或者if语句吗?

标签:

原文地址:http://www.cnblogs.com/binglin92/p/4432803.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!