Форматирование строковых объектов
Эта статья описывает, как создать строку с помощью строки формата, как использовать символы неASCII в строке формата и распространенную ошибку, при использовании которой делают разработчики NSLog
или NSLogv
.
Форматирование основ
NSString
использует строку формата, синтаксис которой подобен используемому другими объектами средства форматирования. Это поддерживает символы формата, определенные для функции ANSI C printf()
, плюс %@
для любого объекта (см. Спецификаторы Формата строки и IEEE printf спецификация). Если объект отвечает на descriptionWithLocale:
сообщения, NSString
отправляет такое сообщение для получения текстового представления. Иначе, это отправляет a description
сообщение. Локализация Строковых ресурсов описывает, как работать с и переупорядочить аргументы переменной в локализованных строках.
В строках формата,‘%
’символ объявляет о заполнителе для значения с символами, следующими за определением ожидаемого вида имеющего значение и как отформатировать его. Например, строка формата "%d houses"
ожидает, что целочисленное значение будет заменено выражение формата'%d
'. NSString
поддерживает символы формата, определенные для функции ANSI Cprintf()
, плюс‘@
’для любого объекта. Если объект отвечает на descriptionWithLocale:
сообщение, NSString
отправляет то сообщение для получения текстового представления, иначе, это отправляет a description
сообщение.
Форматирование значения затронуто текущей локалью пользователя, которая является NSDictionary
объект, указывающий число, дату и другие виды форматов. NSString
использование только определение локали для десятичного разделителя (данный ключом назван NSDecimalSeparator
). Если Вы используете метод, не указывающий локаль, строка принимает локаль по умолчанию.
Можно использовать NSString
stringWithFormat:
метод и другие связанные методы для создания строк с printf
- разработайте спецификаторы формата и списки аргументов, как описано в Создании и Преобразовании Строковых Объектов. Примеры ниже иллюстрируют, как можно создать строку с помощью множества спецификаторов формата и параметров.
NSString *string1 = [NSString stringWithFormat:@"A string: %@, a float: %1.2f", |
@"string", 31415.9265]; |
// string1 is "A string: string, a float: 31415.93" |
NSNumber *number = @1234; |
NSDictionary *dictionary = @{@"date": [NSDate date]}; |
NSString *baseString = @"Base string."; |
NSString *string2 = [baseString stringByAppendingFormat: |
@" A number: %@, a dictionary: %@", number, dictionary]; |
// string2 is "Base string. A number: 1234, a dictionary: {date = 2005-10-17 09:02:01 -0700; }" |
Строки и символы неASCII
Можно включать символы неASCII (включая Unicode) в строковых методах использования такой как stringWithFormat:
и stringWithUTF8String:
.
NSString *s = [NSString stringWithFormat:@"Long %C dash", 0x2014]; |
С тех пор \xe2\x80\x94
3-байтовая строка UTF-8 для 0x2014
, Вы могли также записать:
NSString *s = [NSString stringWithUTF8String:"Long \xe2\x80\x94 dash"]; |
NSLog и NSLogv
Служебные функции NSLog()
и NSLogv()
используйте NSString
строковые службы форматирования для журналирования сообщений об ошибках. Обратите внимание на то, что в результате этого, необходимо заботиться при указании параметра за эти функции. Частая ошибка состоит в том, чтобы указать строку, включающую символы форматирования, как показано в следующем примере.
NSString *string = @"A contrived string %@"; |
NSLog(string); |
// The application will probably crash here due to signal 10 (SIGBUS) |
Лучше (более безопасно) использовать строку формата для вывода другой строки, как показано в следующем примере.
NSString *string = @"A contrived string %@"; |
NSLog(@"%@", string); |
// Output: A contrived string %@ |