C # verfügt über eine Syntax, mit der Sie den Argumentindex in einem Zeichenfolgenformatbezeichner angeben können, z.
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
Sie können Argumente mehrmals verwenden und Argumente, die angegeben wurden, nicht verwenden. Eine andere Frage erwähnt die gleiche Formatierung für C / C ++ in Form von %[index]$[format]
z %1$i
. Ich konnte NSString nicht dazu bringen, diese Syntax vollständig zu respektieren, da sie sich gut verhält, wenn Argumente aus dem Format weggelassen werden. Folgendes funktioniert nicht wie erwartet (EXC_BAD_ACCESS, da versucht wird, den age
Parameter als NSObject * zu dereferenzieren ):
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
Die Positionsargumente werden nur berücksichtigt, wenn im Format keine Argumente fehlen (was eine seltsame Anforderung zu sein scheint):
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %1$@", name, age];
Alle diese Aufrufe funktionieren in OS X ordnungsgemäß:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Gibt es eine Möglichkeit, dies mit NSString in Objective-C / Cocoa zu erreichen? Es wäre nützlich für Lokalisierungszwecke.