数か月前に、主に多くのタイピングを節約するために、自分の目的に適合させた他の誰かのコードに出くわしました。元の作者に事前にお詫び申し上げます。当然のことながらクレジットを表示したいと思いますが、ハード ドライブを調べてみたところ、元のサンプルも彼または彼女の名前も見つかりませんでした。元のソースに出くわした場合は、この投稿を元の作成者の名前で修正します.
いずれにせよ、基本的な考え方は、$ 文字をマクロのプレフィックス文字として使用し、可変引数を取ることです。はい、gcc と Apple の LLVM コンパイラの両方がこれをサポートしています。私は完全に夢中になり、いくつかの例に基づいてほぼすべてのコア型 (配列、文字列、日付、辞書など) を変換しましたが、次のアイデアを参考にしてください。
#define $string( _format, _args... ) ( [NSString stringWithFormat: ( _format ), _args] )
#define $stringUTF8( _format, _args... ) ( [[NSString stringWithFormat: ( _format ), _args] UTF8String] )
// shorthand container creation (NSArray, NSMutableArray)
#define $array( _objs... ) ( { id objs[] = { _objs }; [NSArray arrayWithObjects: objs count: sizeof(objs) / sizeof(id)]; } )
#define $arrayM( _objs... ) ( { id objs[] = { _objs }; [NSMutableArray arrayWithObjects: objs count: sizeof(objs) / sizeof(id)]; } )
これにより、次のようないくつかのきちんとしたことができます。
NSArray * array;
array = $array( @"foo", @"bar", $string( @"This is a %@ string", @"formatted" ) );
タイピングの手間を大幅に省けます!