Accesos directos en Objective-C para concatenar NSStrings
¿Existen atajos para ( stringByAppendingString:
) concatenación de cadenas en Objective-C, o atajos para trabajar conNSString
en general?
Por ejemplo, me gustaría hacer:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
algo más como:
string myString = "This";
string test = myString + " is just a test";
Una opción:
[NSString stringWithFormat:@"%@/%@/%@", one, two, three];
Otra opción:
Supongo que no estás contento con varios anexos (a+b+c+d), en cuyo caso podrías hacer:
NSLog(@"%@", [Util append:one, @" ", two, nil]); // "one two"
NSLog(@"%@", [Util append:three, @"/", two, @"/", one, nil]); // three/two/one
usando algo como
+ (NSString *) append:(id) first, ...
{
NSString * result = @"";
id eachArg;
va_list alist;
if(first)
{
result = [result stringByAppendingString:first];
va_start(alist, first);
while (eachArg = va_arg(alist, id))
result = [result stringByAppendingString:eachArg];
va_end(alist);
}
return result;
}
Se me ocurren dos respuestas... ninguna es particularmente tan agradable como tener un operador de concatenación.
Primero, use un NSMutableString
, que tiene un appendString
método que elimina parte de la necesidad de cadenas temporales adicionales.
En segundo lugar, utilice an NSArray
para concatenar mediante el componentsJoinedByString
método.
Si tiene 2 literales NSString , también puede hacer esto:
NSString *joinedFromLiterals = @"ONE " @"MILLION " @"YEARS " @"DUNGEON!!!";
Eso también es útil para unirse a #defines:
#define STRINGA @"Also, I don't know "
#define STRINGB @"where food comes from."
#define JOINED STRINGA STRINGB
Disfrutar.
Sigo volviendo a esta publicación y siempre termino clasificando las respuestas para encontrar esta solución simple que funciona con tantas variables como sea necesario:
[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
Por ejemplo:
NSString *urlForHttpGet = [NSString stringWithFormat:@"http://example.com/login/username/%@/userid/%i", userName, userId];