C# ma składnię, która pozwala określić indeks argument w ciągu formatu specyfikacją, np .:Czy istnieje sposób określenia pozycji/indeksu argumentu w łańcuchu znaków NSString stringWithFormat?
string message = string.Format("Hello, {0}. You are {1} years old. How does it feel to be {1}?", name, age);
Można użyć arguments więcej niż raz, a także pominąć argumentów, które są przewidziane zostały użyte. Another question wymienia to samo formatowanie C/C++ w postaci %[index]$[format]
, np. %1$i
. Nie udało mi się uzyskać NSString do w pełni szanować tę składnię, ponieważ zachowuje się dobrze, gdy pomija argumenty z formatu. Poniższa nie działa zgodnie z oczekiwaniami (EXC_BAD_ACCESS ponieważ próbuje nieprawidłowego parametru age
jako NSObject *):
int age = 23;
NSString * name = @"Joe";
NSString * message = [NSString stringWithFormat:@"Age: %2$i", name, age];
pozycyjnych argumentów są przestrzegane tylko wtedy, gdy nie ma żadnych brakujących argumentów od formatu (co wydaje się być dziwne wymaganie):
NSString * message = [NSString stringWithFormat:@"Age: %2$i; Name: %[email protected]", name, age];
Wszystkie te połączenia działają prawidłowo w OS X:
printf("Age: %2$i", [name UTF8String], age);
printf("Age: %2$i %1$s", [name UTF8String], age);
Czy istnieje sposób accomplishin g to za pomocą NSString w Objective-C/Cocoa? Byłoby przydatne do celów lokalizacyjnych.
Zgłoś błąd (i daj nam znać o błędzie #). –