Что означает stringWithFormat: @ "% @ - 1"? - PullRequest
0 голосов
/ 03 ноября 2011

Я читаю чей-то другой код, и они используют% @ - 1 для форматирования целого числа.Я ничего не могу найти в Google, так как он игнорирует символы.Кто-нибудь еще имел больше опыта в форматировании строк, чем я?

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

Спасибо!

Ответы [ 3 ]

6 голосов
/ 03 ноября 2011

В соответствии со спецификацией :

Каждая спецификация преобразования вводится символом '%' или последовательностью символов "% n $", после чегопоявляются в последовательности:

  • Ноль или более флагов (в любом порядке), которые изменяют значение спецификации преобразования.

  • Необязательный минимумширина поля.Если преобразованное значение имеет меньше байтов, чем ширина поля, оно должно быть дополнено пробелами по умолчанию слева;он дополняется справа, если для ширины поля указан флаг регулировки слева ('-'), описанный ниже.Ширина поля принимает форму звездочки ('*'), описанной ниже, или десятичного целого числа.

  • Необязательная точность, которая дает минимальное количество цифр для отображения, i, o, u, x и X спецификаторы преобразования;количество цифр после радикального символа для спецификаторов преобразования a, A, e, E, f и F;максимальное количество значащих цифр для спецификаторов преобразования g и G;или максимальное количество байтов, которое будет напечатано из строки в спецификаторах преобразования s [XSI] [Option Start] и S [Option End].Точность принимает форму точки ('.'), За которой следует звездочка ('*'), описанная ниже, или необязательная строка десятичных цифр, где строка с нулевыми цифрами рассматривается как ноль.Если точность появляется с любым другим спецификатором преобразования, поведение не определено.

  • Необязательный модификатор длины, который определяет размер аргумента.

  • Символ спецификатора преобразования, указывающий тип применяемого преобразования.

Мы используем преобразование первого типа, поскольку здесь нет знака доллара.Обратите внимание на слова в последовательности в верхней части списка выше.@ - это символ спецификатора преобразования (как упоминалось здесь ), который указывает, что мы должны получить доступ к значению, переданному как NSObject, и прочитать его description свойство.Так как мы уже достигли последнего пункта, код формата фактически заканчивается после символа @, и, как указал @Kevin Ballard, -1 анализируется как буквальный текст.

6 голосов
/ 03 ноября 2011

Это просто собирается напечатать «NUM-1» (где NUM - число). Например, если число равно 5, будет напечатано «5-1».

При использовании строк формата любые модификаторы токена формата должны находиться перед спецификатором типа формата. В этом случае это означает, что любые модификаторы к токену %@ должны находиться между % и @ (хотя я не уверен, существуют ли вообще какие-либо модификаторы, которые %@ принимает).

3 голосов
/ 03 ноября 2011

subnumber, вероятно, является объектом класса, подобным NSNumber. Как мы используем% d для int,% f для float,% @ является заполнителем для ссылки. В этом случае

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

напечатает '5-1'

...