banner
李大仁博客

李大仁博客

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

[iOS] IIF機能とDECODE関数機能の実装

iOS 開発の過程では、多くの分岐判断コードを処理する必要があり、if や switch などを多用して分岐処理を行います。コードの記述や確認には潜在的な問題が発生する可能性があり、Objective-c 言語の特性を活かして、以下の変換を通じて分岐判断処理のコード記述を最適化できます。重要なのは、さまざまな分岐判断を 1 行のコードで実現できることです。コードの簡素化を実現します。

マクロ定義を使用して三項演算子を 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使用デモ
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使用デモ
NSString \*str2Decode = @"abc";
//Defaultを使用することができます
NSString \*decodeResult1 = \[str2Decode decode:@"key1",@"1",@"abc",@"2",@"efg",@"3",@"デフォルトで",nil\];
//Defaultを使用しない
NSString \*decodeResult2 = \[str2Decode decode:@"key1",@"1",@"abc",@"2",@"efg",@"3",nil\];
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。