私は数ヶ月前に他の人のコードに出くわしました。自分の目的に合わせて、主に多くのタイピングを省くためでした。私は元の著者に事前にお詫びします、私はそれが原因でどこにクレジットを与えたいですが、私は私のハードドライブを掘って、元のサンプルまたは彼または彼女の名前を見つけることができませんでした。私が元のソースに遭遇した場合は、この投稿を元の著者の名前で修正します。
いずれにせよ、基本的な考え方は、マクロプレフィックス文字として$文字を使用し、次に可変引数を取ることです。はい、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"));
は、タイピングの全体多くを保存します。 !
出典
2012-05-11 09:27:12
par
いいえ、ありがとう!それはたくさんのことを説明しています。私は最初に間違った方法で自分の問題を見ています。 – Kuba