Они не особенно распространены, и вы не встретите их в своем коде так часто, как массивы, словари или циклы. Но когда они вам действительно нужны, они могут оказаться чрезвычайно полезными. О чем я говорю? Наборы символов! Инициализация и реализация набора символов определенно озадачила меня, когда мне в первый раз действительно понадобилось его использовать, поэтому я определенно хотел изучить эту тему еще раз.

Что такое набор символов?

Apple сообщает нам, что набор символов - это тип набора - неупорядоченного набора уникальных элементов, который содержит символы, совместимые с Unicode. Поскольку они неупорядочены и не содержат дубликатов, наборы символов обычно используются в операциях поиска, а не для хранения и доступа к информации.

Создать свой собственный набор символов очень просто. Ниже набор символов гласных инициализируется и содержит буквы a, e, i, o, и u.

Применение наборов символов в действии

Теперь мы можем использовать этот набор символов для поиска в строке. Допустим, у меня есть две постоянные строки: fullWord и shortWord:

Содержат ли эти строки какие-либо символы из гласных? Как мы можем проверить? Я обнаружил, что один из способов сделать это - использовать функцию rangeOfCharacter (from:), которая принимает набор символов в качестве аргумента. (Поскольку набор символов не может быть нулевым для использования этой функции, вам также необходимо будет развернуть его.)

Однако это довольно неуклюже, и определенно есть несколько более элегантных способов найти ответ на этот вопрос. Хм. Что-то мне не хватает? А для чего еще подходят наборы символов?

Свойства типа набора символов

Один очень полезный аспект наборов символов - это их свойства типа. В основном это предварительно упакованные группы символов, основанные на категориях Unicode, которые готовы к использованию!

Вот несколько примеров свойств этих типов:

Вы можете увидеть полный список наборов символов в Справочнике API Apple. Давайте рассмотрим некоторые из них более подробно ниже.

Свойство пунктуации

Свойства типа набора символов - это фантастика, если вы имеете представление о том, что может содержать ваш набор символов, но не знаете исчерпывающий список каждого символа насквозь. На ум приходит, например, пунктуация. Что, если вы хотите удалить все знаки препинания из строки, чтобы остались только буквы? Какие знаки препинания вы бы искали и исключали?

Я бы хотел убрать точки, запятые, восклицательные знаки, вопросительные знаки, двоеточия , точки с запятой, дефисы, тире, апострофы, цитата знаки, косая черта, обратная косая черта… и я даже не уверен, что это действительно все. А как насчет амперсандов, скобок и скобок? А как насчет знаков препинания на разных языках, например на испанском? (¡Hola!)

Слишком много знаков препинания, чтобы можно было уверенно учесть их все вручную. Но, к счастью, Unicode и свойство набора символов punctuationCharacters делают это за нас!

Все просто, правда? Но какие символы на самом деле содержатся в CharacterSet.punctuationCharacters? В своей документации Apple объявляет свойство punctationCharacters, но не предоставляет дополнительной информации о том, что оно включает, и печать набора на игровой площадке также не дает результатов.

Возвращаясь к нашему первому определению, набор символов - это группа символов, совместимых с Unicode. Поэтому для получения дополнительной информации о том, какие символы Unicode содержатся в типе punctuationCharacters, давайте перейдем прямо к источнику: Unicode.

Просмотр Стандартной пунктуации Unicode версии 9.0 дает нам диаграмму всех знаков препинания, которые Unicode классифицирует в настоящее время. В дополнение к стандартным знакам препинания латинского алфавита, в них также есть некоторые знаки препинания, которых вы не видите каждый день… например, , который, как сообщает нам Unicode, является японским комэ и разделителем абзацев урду. Прохладный!

Символы свойство

Еще одно полезное свойство набора символов - это символы. Знаете ли вы, что смайлы классифицируются как символы Unicode? Если бы мы захотели вручную учесть все возможности смайлов и удалить их из строки, это заняло бы нелепое количество времени.

Но с наборами символов есть способ лучше! Взгляните на эту строку:

Поскольку Unicode уже сгруппировал все смайлы в категории symbols, все, что нам нужно сделать, чтобы удалить смайлики, - это вызвать свойство symbols для набора символов .

Да да! Все готово! (Извините, не удержался!)

Я надеюсь, что это дало вам представление о некоторых интересных вещах, которые вы можете делать с наборами символов и, в частности, с их свойствами. Спасибо за прочтение!

Дополнительная литература:
Наборы символов: разработчик Apple
Стандарт Unicode
Знаки пунктуации Unicode
Символы Unicode Emoji