您的位置:首页 > 移动开发 > IOS开发

[iOS] 实现IIF功能和DECODE函数功能

2016-08-16 10:44 405 查看
iOS开发过程中需要处理大量分支判断代码,需要大量使用if、switch等进行分支处理。代码编写和查看都可能出现潜在问题,使用Objective-c语言的自身特点,可以通过以下转换,优化分支判断处理的代码写法。关键是可以一行代码搞定各种分支判断。实现代码简化。

使用宏定义将三目运算改为IIF函数运算,类似于EXCEL的IF公式
#if !defined(IIF)
#define IIF_IMPL(condition,true_,false_) (condition)?true_:false_
#define IIF(condition,true_,false_) IIF_IMPL(condition,true_,false_)
#endif


使用Category拓展NSString,支持DECODE计算,类似于ORACLE等数据库系统中SQL的DECODE()函数。这里使用了可变参数列表方式可以实现无限制使用参数。
-(NSString *)decode:(NSString *)firstKey, ... NS_REQUIRES_NIL_TERMINATION
{
va_list params; //定义一个指向个数可变的参数列表指针;
id next;
if (firstKey) {
va_start(params,firstKey);//va_start  得到第一个可变参数地址,
id key = firstKey;
//va_arg 指向下一个参数地址
while(key && (next = va_arg(params,id)))
{
if (next && key){
if ([self isEqualToString:key]) {
return next;
}
}
key = va_arg(params,id);
}
return key;
//置空
va_end(params);
}else{
return firstKey;
}
}


使用IIF和DECODE的方法如下
//IIF使用DEMO
int a = 1;
//单次
NSString *result1 = IIF(a==1, @"a = 1", @"a <> 1");
//级连
NSString *result2 = IIF(a==1, IIF(a==2, @"a = 2", @"a <> 2"), @"a <> 1");
//DECODE使用DEMO
NSString *str2Decode = @"abc";
//支持使用Default
NSString *decodeResult1 = [str2Decode decode:@"key1",@"1",@"abc",@"2",@"efg",@"3",@"with default",nil];
//不使用Default
NSString *decodeResult2 = [str2Decode decode:@"key1",@"1",@"abc",@"2",@"efg",@"3",nil];


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

- 版权声明:

- 如在本页面内无特别说明,本文内容均为[李大仁博客]原创,本文版权归[李大仁博客]所有。

- 欢迎转载,转载请务必在文章页面明显位置提供原文链接并注明出处。欢迎您在转载本文时保留本段声明。

- 文章标题: [iOS] 实现IIF功能和DECODE函数功能

- 独立博客:李大仁博客

- 永久链接:http://www.lidaren.com/archives/1628

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

以上内容由博客自动发布工具自动发布,最终显示内容和效果会与原文内容有所偏差,敬请谅解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: