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