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 повністю поважати цей синтаксис, оскільки він поводиться добре, опускаючи аргументи з формату. Далі не працює належним чином (EXC_BAD_ACCESS, оскільки він намагається визначити ageпараметр як NSObject *):
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];
Усі ці дзвінки працюють належним чином в OS X:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Чи є спосіб досягти цього за допомогою NSString в Objective-C / Cocoa? Це було б корисно для цілей локалізації.