Je travaille dans les podcasts iPhone Stanford et j'ai des questions de base.
Le premier: pourquoi n'y a-t-il pas de concaténation facile à chaîne? (Ou suis-je juste en train de manquer?) P>
J'avais besoin d'aide avec le NSLog ci-dessous et je n'ai aucune idée de ce qu'il fait actuellement (la% @ partie). Certainez-vous simplement les remplacer par partout où vous avez besoin d'une concaténation, puis des virgules séparent les valeurs à la fin? P> alors que tout autre langage de programmation que je l'aurais fait comme ça : P> NSLog(@"My home folder is at " + absolutePath);
4 Réponses :
Lorsque vous faites quelque chose comme: P> % @ code> est un espace réservé dans une chaîne de format, pour une instance Nstring.
NSString *s1 = @"Hello, ";
NSString *s2 = @"world.";
NSString *s = [NSString stringWithFormat:@"%@%@", s1, s2];
// s will be "Hello, world."
Cool, merci pour l'explication claire et simple. Pour mon exemple, cela serait-il meilleur ("plus objectif - C-type") de le faire via un espace réservé ou via une concaténation de chaîne?
String Format Spécificateurs peut imprimer d'autres types à partir d'objets Objective-C, tels que des entiers (% i code>), doubles (
% f code>), C chaînes (
% s code>) et ainsi de suite. Vous ne pouvez pas faire cela avec les opérateurs de concaténation. Les spécificateurs de formats de chaîne proviennent de C et sont utilisés dans des fonctions telles que
printf () code> pour la sortie. La syntaxe
% @ code> est un ajout d'objectif-C aux spécificateurs de format C chaîne existants qui imprime la sortie de la méthode code> -Description code> d'un objet de l'objectif-c.
J'utiliserais personnellement des espaces réservés. Mais ce n'est pas faux si vous le faites avec une concaténation à cordes ... :-)
Vous pouvez utiliser NSString + StringwithFormat pour faire une concaténation: La raison du"% @ "est que le formatage de la chaîne est basé sur la mise en forme de la chaîne De et étend le Syntaxe de format Printf . Ces fonctions prennent un nombre variable d'arguments et tout ce qui commence par un signe pour cent (%) est interprété comme un porte-lieu. Les caractères suivants déterminent le type du support de lieu. Le standard printf n'utilise pas "% @", et comme "@" est le symbole couramment utilisé pour les choses que l'objectif-C ajoute au langage C, il est logique que le "@" symbolise "un objet de l'objectif-c . p> Il n'y a pas de concatétation automatique à l'aide du signe plus (+), car Nstring * est un type de pointeur et l'objectif-c est un superset strict de C, et donc, par conséquent, ajoutant à une nstring * objet fait la manipulation du pointeur. Objective-c n'a pas de fonctionnalité de surcharge de l'opérateur comme dans la langue C ++. P> p>
Aussi, % @ code> est assez polyvalent, car elle insère en fait le résultat de la méthode de description de l'argument dans la chaîne de résultat. Pour Nstring, c'est la valeur de la chaîne, d'autres classes peuvent fournir des substitutions utiles. Semblable à Tostring en Java, par exemple. P>
Pourquoi n'y a-t-il pas de concaténation facile à chaîne?
[@ "FOO" StringByAppendingString: @ "bar"] code>. Oui vraiment. Vous pouvez également consulter les docs pour
nsmutableString code> qui aide un peu.
Pensez-vous vraiment que c'est "facile" par rapport à "foo" + "bar"? Mais est-ce une meilleure façon de le faire que l'approche «% @» que j'ai prise?
StringByAppendingString Code> rend l'intention beaucoup plus claire que la surcharge
+ code>. Ou est-ce
. Code> pour concaténer? À cet égard, il est plus facile que d'utiliser le mauvais opérateur surchargé. En outre, que devriez-vous arriver si vous essayez d'ajouter un entier à une chaîne? Par exemple.
"foo" + 6 code>. Qu'en est-il d'ajouter une chaîne à un entier? Utilisation de
StringByAppendingString CODE> signifie que je n'ai pas à y penser. Peut-être que vous ne voulez pas dire plus facile i> tant que Lazier i>.
StringByAppendingsRing Le rend également plus clair que les chaînes sont immuables, il est très facile d'utiliser "+" ou "". Beaucoup de fois dans un seul bloc de code et restent parfaitement inconscients du nombre d'objets que vous créez.