2012-07-12 10 views
23

Kiedy używam formatowania ciągów znaków, czy mogę uzyskać dostęp do jednego parametru wiele razy bez przekazywania go ponownie?"NSString stringWithFormat:" - Czy uzyskasz dostęp do tego samego parametru wiele razy?

Przykład:

NSString *parameter1 = @"1"; 
NSString *parameter2 = @"2"; 

NSString *myString; 
myString = [NSString stringWithFormat:@"I want to print parameter1 here: %@, parameter2 here: %@ and now access parameter1 again: %@ _without_ passing it again.",parameter1, parameter2, parameter1]; 

Czy istnieje sposób, aby uzyskać dostęp do pierwszego parametru ponownie bez pisania”, parameter1" znowu?

Odpowiedz

54

Tak, używając pozycyjne argumenty:

// prints: foo bar foo bar 
NSLog(@"%@", [NSString stringWithFormat:@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"]); 

// NSLog supports it too 
NSLog(@"%[email protected] %[email protected] %[email protected] %[email protected]", @"bar", @"foo"); 
+5

Należy zauważyć, że w ciągu formatu, należy odnieść się do wszystkich argumentów dostarczonych w liście argumentów. na przykład. Poniższy kod spowoduje błąd w czasie wykonywania, ponieważ pierwszy argument pozycyjny jest nieużywany w ciągu znaków formatowania: '[NSString stringWithFormat: @"% 2 $ @ ", @" bar ", @" foo "]' - zobacz http: //stackoverflow.com/questions/2946649/nsstring-stringwithformat-swzzmocnione-to -allow-missing-format-numbered-args – mrb

+1

@mrb W prawo. Jest to efekt uboczny implementacji zmiennych argumentów ('...') w C (nie błąd). Jeśli nie powiesz funkcji formatowania, jaki typ ma argument (odwołując się do niego przynajmniej raz), nie ma sposobu, aby poprawnie zlokalizować po nim. – hamstergene

+0

Próbuję go z predicateWithFormat, ale nie działa. W jaki sposób można użyć pozycji argumentu dla predykatu? – Add080bbA

Powiązane problemy