2012-07-12 9 views
23

Cuando uso el formato de cadenas, ¿puedo acceder a un parámetro varias veces sin pasarlo de nuevo?"NSString stringWithFormat:" - ¿Accede al mismo parámetro varias veces?

Ejemplo:

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]; 

¿Hay una manera de acceder al primer parámetro de nuevo sin necesidad de escribir", parametro1" de nuevo?

Respuesta

54

Sí, utilizando argumentos posicionales :

// 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

Nótese que en la cadena de formato, es necesario hacer referencia a todos los argumentos proporcionados en la lista de argumentos. p.ej. El siguiente código causará un error en el tiempo de ejecución, porque el primer argumento posicional no se utiliza en la cadena de formato: '[NSString stringWithFormat: @"% 2 $ @ ", @" bar ", @" foo "]' - vea http: //stackoverflow.com/questions/2946649/nsstring-stringwithformat-swizzled-to-allow-missing-format-numbered-args – mrb

+1

@mrb Right. Es un efecto colateral de la implementación de argumentos variables ('...') en C (no es un error). Si no le dice a la función de formateo qué tipo de argumento tiene (al referirse a él al menos una vez), no hay forma de localizar correctamente los que están detrás de él. – hamstergene

+0

lo intento con predicateWithFormat pero no funciona. ¿cómo se puede usar la posición de argumento para el predicado? – Add080bbA

Cuestiones relacionadas