Наборы символов

NSCharacterSet объект представляет ряд символов Unicode. NSString и NSScanner использование объектов NSCharacterSet объекты собрать в группу символы для поиска операций, так, чтобы они могли найти любой определенный набор символов во время поиска.

Основы набора символов

Объект набора символов представляет ряд символов Unicode. Наборы символов представлены экземплярами кластера класса. Два общедоступных класса кластера, NSCharacterSet и NSMutableCharacterSet, объявите программируемый интерфейс для неизменных и непостоянных наборов символов, соответственно. Неизменный набор символов определяется, когда он создается и впоследствии не может быть изменен. Непостоянный набор символов может быть изменен после того, как он будет создаваться.

Объект набора символов не выполняет задач; это просто содержит ряд символьных значений для ограничения операций на строках. NSString и NSScanner классы определяют берущие методы NSCharacterSet объекты как параметры для нахождения любого из нескольких символов. Например, эта выборка кода находит диапазон первой прописной буквы в myString:.

NSString *myString = @"some text in an NSString...";
NSCharacterSet *characterSet = [NSCharacterSet uppercaseLetterCharacterSet];
NSRange letterRange = [myString rangeOfCharacterFromSet:characterSet];

После того, как этот фрагмент выполняется, letterRange.location равно индексу первого «N» в «NSString» после rangeOfCharacterFromSet: вызывается. Если первая буква строки была «S», то letterRange.location был бы 0.

Создание наборов символов

NSCharacterSet определяет методы класса, возвращающие обычно используемые наборы символов, такие как буквы (верхний регистр или нижний регистр), десятичные цифры, пробел, и т.д. Эти «стандартные» наборы символов являются всегда неизменными, даже если создаваемый путем отправки сообщения в NSMutableCharacterSet. Посмотрите Наборы Стандартного символа и Определения Unicode для получения дополнительной информации о наборах стандартного символа.

Можно использовать набор стандартного символа в качестве начальной точки для создания пользовательского набора путем создания непостоянной копии из него и изменения этого. (Можно также запустить с нуля путем создания непостоянного набора символов с alloc и init и добавление символов к нему.), Например, этот фрагмент создает набор символов, содержащий буквы, цифры и основную пунктуацию:

 
NSMutableCharacterSet *workingSet = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
[workingSet addCharactersInString:@";:,."];
NSCharacterSet *finalCharacterSet = [workingSet copy];

Для определения пользовательского набора символов с помощью кодовых точек Unicode используйте код, подобный следующему фрагменту (который создает набор символов включая символы перевода страницы и символы разделителя строк):

UniChar chars[] = {0x000C, 0x2028};
NSString *string = [[NSString alloc] initWithCharacters:chars
                            length:sizeof(chars) / sizeof(UniChar)];
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:string];

Соображения производительности

Поскольку наборы символов часто участвуют в критическом по отношению к производительности коде, необходимо знать об аспектах их использования, которое может влиять на производительность приложения. Непостоянные наборы символов являются обычно намного более дорогими, чем неизменные наборы символов. Они используют больше памяти и являются дорогостоящими для инвертирования (работа, часто выполняемая в сканировании строки). Из-за этого необходимо следовать этим инструкциям:

Создание файла набора символов

Если Ваше приложение часто использует пользовательский набор символов, необходимо сохранить его определение в файле ресурсов и загрузке, что вместо того, чтобы явно добавить отдельные символы каждый раз необходимо создать набор. Можно сохранить набор символов путем получения его растрового представления ( NSData объект) и сохранение, которые возражают против файла:

NSData *charSetRep = [finalCharacterSet bitmapRepresentation];
NSURL *dataURL = <#URL for character set#>;
NSError *error;
BOOL result = [charSetRep writeToURL:dataURL options:NSDataWritingAtomic error:&error];

Условно, имена файлов набора символов используют расширение .bitmap. Если Вы намереваетесь для других использовать свои файлы набора символов, необходимо следовать этому соглашению. Считать файл набора символов с a .bitmap расширение, просто используйте characterSetWithContentsOfFile: метод.

Наборы стандартного символа и определения Unicode

Наборы стандартного символа, такие как возвращенный letterCharacterSet, формально определяются с точки зрения нормативных и информативных категорий, установленных стандартом Unicode, таких как Прописная буква, Комбинируя Знак, и т.д. Формальное определение набора стандартного символа в большинстве случаев дано как один или больше категорий, определенных в стандарте. Например, набор, возвращенный lowercaseLetterCharacterSet включайте все символы в нормативные Строчные буквы категории, в то время как набор, возвращенный letterCharacterSet включает символы во все категории Буквы.

Обратите внимание на то, что определения самих категорий могут измениться с новыми версиями стандарта Unicode. Можно загрузить файлы, определяющие членство в категории от http://www .unicode.org/.