banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

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

在 iOS 开发中,需要处理大量的分支判断代码,需要使用 if、switch 等语句进行分支处理。代码编写和查看时可能会出现潜在问题。使用 Objective-C 语言的特点,可以通过以下转换来优化分支判断处理的代码编写方式。关键是可以用一行代码解决各种分支判断。实现代码简化。

使用宏定义将三目运算改为 IIF 函数运算,类似于 EXCEL 的 IF 公式

#if !defined(IIF)
#define IIF_IMPL(condition,true_,false_) (condition)?true__
#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]) {
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\];
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。