¿Hay atajos para la stringByAppendingString:
concatenación de cadenas ( ) en Objective-C o atajos para trabajar NSString
en general?
Por ejemplo, me gustaría hacer:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
algo mas como:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typeoneerror
fuente
fuente
Respuestas:
Se me ocurren dos respuestas ... ninguna es tan agradable como tener un operador de concatenación.
En primer lugar, utilice una
NSMutableString
, que tiene unappendString
método, la eliminación de algunos de la necesidad de cadenas temporales adicionales.Segundo, use un
NSArray
para concatenar a través delcomponentsJoinedByString
método.fuente
[NSMutableString appendString]
es más amigable con la memoria que[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
técnica parece la más elegante. Debería ser la respuesta seleccionada.Una opción:
Otra opción:
Supongo que no estás contento con múltiples anexos (a + b + c + d), en cuyo caso podrías hacer:
usando algo como
fuente
Si tiene 2 literales NSString , también puede hacer esto:
Eso también es útil para unirse a #defines:
Disfrutar.
fuente
@
s en las cuerdas después de la primera.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
no funciona? Tengo unExpected '@' in program
error :(TABLE_NAME
define?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:
Por ejemplo:
fuente
Crea un método:
Luego, en cualquier función en la que lo necesite, configure su cadena o campo de texto o lo que sea para el valor de retorno de esta función.
O, para hacer un acceso directo, convierta el NSString en una cadena de C ++ y use el '+' allí.
fuente
Bueno, como los dos puntos son una especie de símbolo especial, pero es parte de la firma del método, es posible salir de la
NSString
categoría con para agregar este estilo no idiomático de concatenación de cadenas:Puede definir tantos argumentos separados por dos puntos como considere útil ... ;-)
Para una buena medida, también he agregado
concat:
argumentos variables que toman unanil
lista terminada de cadenas.fuente
stringWithFormat:
. Sin mencionar la falta de parámetros con nombre que no solo no es estándar sino que también es confuso.stringByAppendingString
, y nunca dijo nada sobre el uso de más de dos argumentos. Me gusta esta respuesta mejor que la aceptada. Es bastante inteligenteUse de
stringByAppendingString:
esta manera:O
fuente
Macro:
Casos de prueba:
Macro alternativa: (si desea aplicar un número mínimo de argumentos)
fuente
-[NSString stringByAppendingString:]
para este caso de uso: con el primero obtendrá una excepción si el argumento esnil
pero no si el receptor lo es. Por lo tanto, es probable que haya un 50% de probabilidades de que un error en su alimentador de cadenas falle silenciosamente y un 50% en una excepción. ConstringConcat
usted tiene garantizada una excepción en cualquiernil
parte de la lista. Lo que al menos es más predecible.Al crear solicitudes de servicios web, encuentro que hacer algo como lo siguiente es muy fácil y hace que la concatenación sea legible en Xcode:
fuente
Atajo creando macro AppendString (AS) ...
Nota:
Si usa una macro, por supuesto, hágalo con argumentos variables, vea la respuesta de EthanB.
fuente
fuente
Aquí hay una manera simple, utilizando la nueva sintaxis literal de matriz:
fuente
Después de un par de años con Objective CI, creo que esta es la mejor manera de trabajar con Objective C para lograr lo que está tratando de lograr.
Comience a escribir "N" en su aplicación Xcode y se autocompletará a "NSString". introduzca "str" y se autocompletará a "stringByAppendingString". Por lo tanto, las pulsaciones de teclas son bastante limitadas.
Una vez que se acostumbra a presionar la tecla "@" y tabular el proceso de escribir código legible ya no se convierte en un problema. Es solo una cuestión de adaptación.
fuente
La única forma de
c = [a stringByAppendingString: b]
acortar es usar autocompletar alrededor delst
punto. El+
operador es parte de C, que no conoce los objetos Objective-C.fuente
#define
podría usar a para acortarlo.¿Qué tal acortar
stringByAppendingString
y usar un #define :Así usarías:
El problema es que solo funciona para dos cadenas, debe ajustar corchetes adicionales para más apéndices:
fuente
fuente
fuente
Probé este código. Me ha funcionado.
fuente
appendString:
si estás usando aNSMutableString
.Estaba intentando lo siguiente en el
lldb
panelque errores
en su lugar use alloc y
initWithFormat
método:fuente
Esto es para un mejor registro, y solo para el registro, basado en un excelente método de argumento múltiple dicius. Defino una clase Logger y la llamo así:
Casi bueno, excepto tener que terminar los argumentos de var con "nulo", pero supongo que no hay forma de evitarlo en Objective-C.
Logger.h
Logger.m
Para solo concatenar cadenas, definiría una Categoría en NSString y agregaría un método de concatenación estático (+) que se ve exactamente como el método de registro anterior, excepto que devuelve la cadena. Está en NSString porque es un método de cadena, y es estático porque desea crear una nueva cadena a partir de cadenas 1-N, no invocarla en ninguna de las cadenas que forman parte del anexo.
fuente
fuente
Prueba stringWithFormat:
fuente
Cuando trato con cadenas a menudo me resulta más fácil hacer el archivo fuente ObjC ++, entonces puedo concatenar cadenas std :: usando el segundo método que se muestra en la pregunta.
fuente
Mi método preferido es este:
Puede lograrlo agregando el método de unión a NSArray con una categoría:
@[]
es la definición corta deNSArray
, creo que este es el método más rápido para concatenar cadenas.Si no desea usar la categoría, use directamente el
componentsJoinedByString:
método:fuente
Puedes usar NSArray como
o
puedes usar
fuente
Cualquiera de estos formatos funciona en XCode7 cuando probé:
Por alguna razón, solo necesita el carácter de operador @ en la primera cadena de la mezcla.
Sin embargo, no funciona con inserción variable. Para eso, puede usar esta solución extremadamente simple con la excepción de usar una macro en "cat" en lugar de "y".
fuente
Para todos los amantes del objetivo C que necesitan esto en una prueba de interfaz de usuario:
fuente
fuente
Imaginemos que no sabes cuántas cuerdas hay.
fuente