C# a la syntaxe qui permet de spécifier l'argument de l'indice en chaîne de spécificateur de format, par exemple:
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
Vous pouvez utiliser des arguments plus d'une fois et aussi omettre les arguments qui sont prévus d'être utilisés. Une autre question mentionne la même mise en forme pour le C/C++ sous la forme d' %[index]$[format]
, par exemple, %1$i
. Je n'ai pas été en mesure d'obtenir NSString à pleinement respecter cette syntaxe, car elle ne se comportent bien lors de l'omission des arguments de ce format. Le code suivant ne fonctionne pas comme prévu (EXC_BAD_ACCESS car il tente de déréférencement de l' age
paramètre comme une NSObject*):
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
Les arguments de position sont respectées que si il ne manque aucun des arguments de la forme (ce qui semble être une exigence étonnante):
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %1$@", name, age];
Tous ces appels à travailler correctement dans OS X:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Est-il un moyen d'accomplir cela en utilisant NSString en Objective-C / Cocoa? Il serait utile pour la localisation des fins.