2012-07-12 10 views
23

文字列の書式設定を使用しているときに、もう一度渡すことなく1つのパラメータに複数回アクセスできますか?"NSString stringWithFormat:" - 同じパラメータに複数回アクセスしますか?

例:

NSString *parameter1 = @"1"; 
NSString *parameter2 = @"2"; 

NSString *myString; 
myString = [NSString stringWithFormat:@"I want to print parameter1 here: %@, parameter2 here: %@ and now access parameter1 again: %@ _without_ passing it again.",parameter1, parameter2, parameter1]; 

記述することなく、再び最初のパラメータにアクセスする方法は、再び」パラメータ1" はありますか?

答えて

54

はい、位置引数使用:フォーマット文字列で、あなたが引数リストで提供される全ての引数を参照する必要があることを

// prints: foo bar foo bar 
NSLog(@"%@", [NSString stringWithFormat:@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"]); 

// NSLog supports it too 
NSLog(@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"); 
+5

注意を。例えば。次のコードは、最初の位置引数が書式文字列で使用されていないため、実行時にバグが発生します。 '[NSString stringWithFormat:@"%2 $ @ "、@" bar "、@" foo "]' - http: //stackoverflow.com/questions/2946649/nsstring-stringwithformat-swizzled-to-allow-missing-format-numbered-args – mrb

+1

@mrb右。これはCでの可変引数( '...')の実装の副作用です(バグではありません)。書式設定関数に引数の型を指定しないと(少なくとも1回はそれを参照することによって)引数の後ろにあるものを正しく見つける方法がありません。 – hamstergene

+0

私はそれをpredicateWithFormatで試しましたが、動作しません。どのように述語の引数の位置を使用できますか? – Add080bbA

関連する問題