C#には、文字列形式指定子で引数インデックスを指定できる構文があります。例:
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
引数は複数回使用でき、提供された引数は使用しないようにすることもできます。別の質問では、C / C ++の同じフォーマットが%[index]$[format]
たとえばの形式で言及されています%1$i
。NSStringにこの構文を完全に尊重させることはできませんでした。これは、フォーマットから引数を省略した場合に適切に動作するためです。以下は期待どおりに機能しません(age
パラメーターをNSObject *として逆参照しようとするため、EXC_BAD_ACCESS )。
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
位置引数は、フォーマットから欠落している引数がない場合にのみ尊重されます(これは奇妙な要件のようです)。
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %1$@", name, age];
これらの呼び出しはすべて、OSXで正しく機能します。
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Objective-C / CocoaでNSStringを使用してこれを実現する方法はありますか?ローカリゼーションの目的に役立ちます。