标签:
使用场景: 服务器传来一组数据,比如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对应的时间
标签:
原文地址:http://www.cnblogs.com/binglin92/p/4432803.html