C # ma składnię, która umożliwia określenie indeksu argumentu w specyfikatorze formatu ciągu, np .:
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
Możesz użyć argumentów więcej niż raz, a także pominąć argumenty, które są używane. Kolejne pytanie dotyczy tego samego formatowania dla C / C ++ w postaci %[index]$[format]
np %1$i
. Nie udało mi się sprawić, by NSString w pełni przestrzegał tej składni, ponieważ zachowuje się dobrze, gdy pomija argumenty z formatu. Poniższe nie działa zgodnie z oczekiwaniami (EXC_BAD_ACCESS, ponieważ próbuje wyodrębnić age
parametr jako obiekt NSObject *):
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
Argumenty pozycyjne są przestrzegane tylko wtedy, gdy nie ma brakujących argumentów z formatu (co wydaje się dziwnym wymaganiem):
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %1$@", name, age];
Wszystkie te wywołania działają poprawnie w systemie OS X:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Czy istnieje sposób na osiągnięcie tego za pomocą NSString w Objective-C / Cocoa? Byłoby to przydatne do celów lokalizacyjnych.