Accesos directos en Objective-C para concatenar NSStrings

Resuelto typeoneerror asked hace 15 años • 30 respuestas

¿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";
typeoneerror avatar Feb 04 '09 13:02 typeoneerror
Aceptado

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;
}
diciu avatar Feb 04 '2009 07:02 diciu

Se me ocurren dos respuestas... ninguna es particularmente tan agradable como tener un operador de concatenación.

Primero, use un NSMutableString, que tiene un appendStringmétodo que elimina parte de la necesidad de cadenas temporales adicionales.

En segundo lugar, utilice an NSArraypara concatenar mediante el componentsJoinedByStringmétodo.

Chris Blackwell avatar Feb 04 '2009 06:02 Chris Blackwell

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.

Johannes Fahrenkrug avatar Mar 17 '2011 11:03 Johannes Fahrenkrug

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];
Kyle Clegg avatar Aug 11 '2012 06:08 Kyle Clegg