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\];
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。