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
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";
//デフォルトの使用をサポート
NSString \*decodeResult1 = \[str2Decode decode:@"key1",@"1",@"abc",@"2",@"efg",@"3",@"with default",nil\];
//デフォルトを使用しない
NSString \*decodeResult2 = \[str2Decode decode:@"key1",@"1",@"abc",@"2",@"efg",@"3",nil\];