2011-11-03 3 views
0

Je suis en train de lire le code de quelqu'un elses et ils utilisent% @ - 1 pour mettre en forme un entier. Je ne trouve rien sur Google car il ignore les symboles. Quelqu'un d'autre avait plus d'expérience au formatage de chaîne que moi?Que signifie stringWithFormat: @ "% @ - 1"?

[NSString stringWithFormat:@"%@-1", subnumber]

Merci!

Répondre

6

Selon le specification:

Chaque spécification de conversion est introduit par le caractère '%', ou par la séquence de caractères " % n $ », après quoi ce qui suit apparaissent dans l'ordre:

  • Zéro ou plusieurs drapeaux (dans l'ordre), qui modif y la signification de la spécification de conversion.

  • Une largeur de champ minimale facultative. Si la valeur convertie a moins d'octets que la largeur du champ, elle doit être complétée par des espaces par défaut sur la gauche; il doit être rembourré sur la droite si le drapeau d'ajustement de gauche ('-'), décrit ci-dessous, est donné à la largeur du champ. La largeur du champ prend la forme d'un astérisque ('*'), décrit ci-dessous, ou d'un entier décimal.

  • Une précision facultative qui donne le nombre minimal de chiffres à afficher pour les spécificateurs de conversion d, i, o, u, x et X; le nombre de chiffres à afficher après le caractère de base pour les spécificateurs de conversion a, A, e, E, f et F; le nombre maximal de chiffres significatifs pour les spécificateurs de conversion g et G; ou le nombre maximal d'octets à imprimer à partir d'une chaîne dans les spécificateurs de conversion s [XSI] [Option Start] et S [End Option]. La précision prend la forme d'un point ('.') Suivi soit d'un astérisque ('*'), décrit ci-dessous, soit d'une chaîne de chiffres décimaux optionnelle, où une chaîne de chiffres nulle est traitée comme zéro. Si une précision apparaît avec tout autre spécificateur de conversion, le comportement n'est pas défini.

  • Un modificateur de longueur facultatif qui spécifie la taille de l'argument.

  • Un caractère de spécification de conversion qui indique le type de conversion à appliquer.

Nous utilisons une conversion du premier type, car il n'y a aucun signe de dollar ici. Notez les mots dans la séquence en haut de la liste ci-dessus.Le @ est un caractère de spécification de conversion (comme indiqué here), ce qui indique que nous devons accéder à la valeur passée en tant que NSObject et lire sa propriété description. Puisque nous avons déjà atteint le dernier point, le code de format se termine après le symbole @, et comme l'a souligné @Kevin Ballard, le -1 est analysé en tant que texte littéral.

6

Cela va juste imprimer "NUM-1" (où NUM est le numéro). Pour donner un exemple, si le nombre est 5, cela affichera "5-1". Lors de l'utilisation de chaînes de format, tous les modificateurs du jeton de format doivent apparaître avant le spécificateur de type de format. Dans ce cas, cela signifie que tous les modificateurs du jeton %@ doivent se produire entre le % et le @ (bien que je ne sache pas s'il existe réellement des modificateurs que %@ accepte).

3

sous-numéro est probablement objet de classe comme NSNumber. Comme nous utilisons% d pour int,% f pour float,% @ est un espace réservé pour une réfrence. Dans ce cas

NSNumber *subnumber = [NSNumber numberWithInt:5]; 
NSLog([NSString stringWithFormat:@"%@-1", subnumber]); 

imprimera '5-1'

+1

Je suggère de ne pas utiliser une chaîne créée dynamiquement comme premier argument de 'NSLog()'. En fait, si je me souviens bien, le compilateur met en garde contre cela. –

+0

L'argument de 'NSLog' est déjà une chaîne de format, donc vous devriez juste écrire' NSLog (@ "% @ - 1", sous-numéro); ' – darvids0n