Existe-t-il des raccourcis vers stringByAppendingString:
la concaténation de chaînes ( ) dans Objective-C, ou des raccourcis pour travailler avecNSString
en général?
Par exemple, je voudrais faire:
NSString *myString = @"This";
NSString *test = [myString stringByAppendingString:@" is just a test"];
quelque chose de plus comme:
string myString = "This";
string test = myString + " is just a test";
objective-c
nsstring
string-concatenation
typeoneerror
la source
la source
Réponses:
Deux réponses auxquelles je peux penser ... ni l'une ni l'autre n'est particulièrement aussi agréable que le simple fait d'avoir un opérateur de concaténation.
Tout d'abord, utilisez un
NSMutableString
, qui a unappendString
méthode, supprimant une partie du besoin de chaînes temporaires supplémentaires.Deuxièmement, utilisez un
NSArray
pour concaténer via lacomponentsJoinedByString
méthode.la source
[NSMutableString appendString]
est plus convivial que la mémoire[NSString stringByAppendingStrings]
.[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
technique semble la plus élégante. Ce devrait être la réponse choisie.Une option:
Une autre option:
Je suppose que vous n'êtes pas satisfait des ajouts multiples (a + b + c + d), auquel cas vous pourriez faire:
en utilisant quelque chose comme
la source
Si vous avez 2 littéraux NSString , vous pouvez également le faire:
C'est également utile pour rejoindre #defines:
Prendre plaisir.
la source
@
s sur les cordes après le premier.@"I" " really" " enjoy"...
NSString* const SQL_CREATE_TABLE_str = @"CREATE TABLE IF NOT EXISTS " TABLE_NAME @" (...);";
ne marche pas? J'ai uneExpected '@' in program
erreur :(TABLE_NAME
défini?Je reviens constamment à ce message et finis toujours par trier les réponses pour trouver cette solution simple qui fonctionne avec autant de variables que nécessaire:
Par exemple:
la source
Créez une méthode:
Ensuite, dans la fonction dans laquelle vous en avez besoin, définissez votre chaîne ou champ de texte ou quoi que ce soit sur la valeur de retour de cette fonction.
Ou, pour créer un raccourci, convertissez la chaîne NSString en chaîne C ++ et utilisez le «+» à cet endroit.
la source
Eh bien, comme deux-points est une sorte de symbole spécial, mais fait partie de la signature de la méthode, il est possible d'étendre la
NSString
catégorie with pour ajouter ce style non idiomatique de concaténation de chaînes:Vous pouvez définir autant d'arguments séparés par deux points que vous le jugez utile ... ;-)
Pour une bonne mesure, j'ai également ajouté
concat:
des arguments variables qui prennent unenil
liste terminée de chaînes.la source
stringWithFormat:
. Sans parler du manque de paramètres nommés qui est non seulement non standard mais aussi déroutant.stringByAppendingString
, et il n'a jamais dit qu'il fallait utiliser plus de deux arguments. J'aime mieux cette réponse que celle acceptée. C'est assez intelligent.Utilisez de
stringByAppendingString:
cette façon:OU
la source
Macro:
Cas de test:
Macro alternative: (si vous souhaitez appliquer un nombre minimum d'arguments)
la source
-[NSString stringByAppendingString:]
pour ce cas d'utilisation - avec le premier, vous obtiendrez une exception si l'argument l'est,nil
mais pas si le récepteur l'est. Il est donc concevable de 50% de chance sur une erreur dans votre chargeur de chaîne échouant silencieusement et de 50% sur une exception. AvecstringConcat
vous est garanti une exception sur toutnil
, n'importe où dans la liste. Ce qui au moins est plus prévisible.Lors de la création de demandes de services Web, je trouve que faire quelque chose comme ce qui suit est très facile et rend la concaténation lisible dans Xcode:
la source
Raccourci en créant une macro AppendString (AS) ...
Remarque:
Si vous utilisez une macro, bien sûr, faites-le simplement avec des arguments variadiques, voir la réponse d'EthanB.
la source
la source
Voici un moyen simple, en utilisant la nouvelle syntaxe littérale du tableau:
la source
Après quelques années maintenant avec Objective CI, je pense que c'est la meilleure façon de travailler avec Objective C pour atteindre ce que vous essayez d'atteindre.
Commencez à saisir "N" dans votre application Xcode et il se remplit automatiquement sur "NSString". entrez "str" et il se remplit automatiquement par "stringByAppendingString". Les frappes sont donc assez limitées.
Une fois que vous maîtrisez la touche "@" et la tabulation, le processus d'écriture de code lisible ne devient plus un problème. C'est juste une question d'adaptation.
la source
La seule façon de
c = [a stringByAppendingString: b]
raccourcir le tout est d'utiliser la saisie semi-automatique aux alentours dust
point. L'+
opérateur fait partie de C, qui ne connaît pas les objets Objective-C.la source
#define
pourrait être utilisé pour le raccourcir.Que diriez-vous de raccourcir
stringByAppendingString
et d'utiliser un #define :Ainsi, vous utiliseriez:
Le problème est que cela ne fonctionne que pour deux chaînes, vous devez envelopper des crochets supplémentaires pour plus d'annexes:
la source
la source
la source
J'ai essayé ce code. ça a marché pour moi.
la source
appendString:
si vous utilisez unNSMutableString
.J'essayais ce qui suit dans le
lldb
voletquelles erreurs.
utilisez plutôt alloc et
initWithFormat
method:la source
C'est pour une meilleure journalisation, et une journalisation uniquement - basée sur une excellente méthode à arguments multiples. Je définis une classe Logger et l'appelle comme ceci:
Presque bien, sauf qu'il faut mettre fin aux arguments var avec "nil" mais je suppose qu'il n'y a aucun moyen de contourner cela dans Objective-C.
Logger.h
Logger.m
Afin de ne concaténer que des chaînes, je définirais une catégorie sur NSString et y ajouterais une méthode de concaténation statique (+) qui ressemble exactement à la méthode log ci-dessus, sauf qu'elle renvoie la chaîne. C'est sur NSString parce que c'est une méthode de chaîne, et c'est statique parce que vous voulez créer une nouvelle chaîne à partir de chaînes 1-N, ne pas l'appeler sur l'une des chaînes qui font partie de l'ajout.
la source
la source
Essayez stringWithFormat:
la source
Lorsque je traite souvent des chaînes, je trouve plus facile de créer le fichier source ObjC ++, puis je peux concaténer std :: strings en utilisant la deuxième méthode indiquée dans la question.
la source
Ma méthode préférée est la suivante:
Vous pouvez y parvenir en ajoutant la méthode join à NSArray avec une catégorie:
@[]
c'est la définition courte pourNSArray
, je pense que c'est la méthode la plus rapide pour concaténer des chaînes.Si vous ne souhaitez pas utiliser la catégorie, utilisez directement la
componentsJoinedByString:
méthode:la source
Vous pouvez utiliser NSArray comme
ou
vous pouvez utiliser
la source
L'un ou l'autre de ces formats fonctionne dans XCode7 lorsque j'ai testé:
Pour une raison quelconque, vous n'avez besoin que du caractère d'opérateur @ sur la première chaîne du mix.
Cependant, cela ne fonctionne pas avec l'insertion de variables. Pour cela, vous pouvez utiliser cette solution extrêmement simple à l'exception de l'utilisation d'une macro sur "chat" au lieu de "et".
la source
Pour tous les amateurs d'Objectif C qui en ont besoin dans un test UI:
la source
la source
Imaginons que vous ne connaissiez pas le nombre de cordes.
la source