C# имеет синтаксис, который позволяет указать индекс аргумента в струнном спецификаторе формата, например .:Есть ли способ указать позицию/индекс аргумента в NSString stringWithFormat?
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
Вы можете использовать аргументы более чем один раз, а также опустить аргументы, которые предоставляются от использования. Another question упоминает одно и то же форматирование для 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: %[email protected]", name, age];
Все эти вызовы работают должным образом в OS X:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
есть ли способ accomplishin g, используя NSString в Objective-C/Cocoa? Это было бы полезно для целей локализации.
Сообщите об ошибке (и сообщите нам об ошибке #). –