7
votes

Syntaxe de base de l'objectif-C: "% @"?

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> xxx pré>

alors que tout autre langage de programmation que je l'aurais fait comme ça : P>

NSLog(@"My home folder is at " + absolutePath);


4 commentaires

Pourquoi n'y a-t-il pas de concaténation facile à chaîne? [@ "FOO" StringByAppendingString: @ "bar"] . Oui vraiment. Vous pouvez également consulter les docs pour nsmutableString 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 rend l'intention beaucoup plus claire que la surcharge + . Ou est-ce . 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 . Qu'en est-il d'ajouter une chaîne à un entier? Utilisation de StringByAppendingString signifie que je n'ai pas à y penser. Peut-être que vous ne voulez pas dire plus facile tant que Lazier .


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.


4 Réponses :



15
votes

% @ code> est un espace réservé dans une chaîne de format, pour une instance Nstring.

Lorsque vous faites quelque chose comme: P>

NSString *s1 = @"Hello, ";
NSString *s2 = @"world.";
NSString *s = [NSString stringWithFormat:@"%@%@", s1, s2];
// s will be "Hello, world."


3 commentaires

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 ), doubles (% f ), C chaînes (% s ) 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 () pour la sortie. La syntaxe % @ est un ajout d'objectif-C aux spécificateurs de format C chaîne existants qui imprime la sortie de la méthode -Description 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 ... :-)



2
votes

Vous pouvez utiliser NSString + StringwithFormat pour faire une concaténation: xxx

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 .

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 ++.


0 commentaires

0
votes

Aussi, % @ 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.


0 commentaires