Как стать автором
Обновить

Swift: String and Characters. Базовый конспект

Кратко и только главное из The Swift Programming Language Book.

Этот конспект нельзя рассматривать как самостоятельное пособие для получения новых знаний, он больше служит для освежения некогда прочитанного. Если вы еще не знакомы с типами String и Characters, рекомендую сперва изучить соответствующую главу в документации.


String - последовательность Characters. Доступ к содержимому строки может быть получен как к массиву Characters. Это Value type.

Инициализация

// Инициализация простой строки с помощью литералов
let simpleString = ""

// Инициализация многострочной строки
let multipleString = """
    ...
    """

// Инициализация с помощью синтаксиса
let emptyString = String()

// Инициализация Character с помощью литоралов
let simpleCharacter: Character = "?"

// Преобразование массива символов в строку
let characters: [Character] = ["?", "!"]
let stringFromArray = String(characters)

Специальные символы

\

экранизирует специальный символ, например когда в текст нужно вставить \”, \”, \\

\t

горизонтальный отступ

\n

новая строка

\r

возврат каретки

\u{…}

вставка символа Unicode. В фигурных скобках указывается номер.

#”…”#

все специальные символы, содержащиеся в строке, будут рассматриваться как обычные символы и не вызовут никаких действий. Чтобы какой-то символ все же применился, необходимо вставить # после знака \ и перед специальным символом, напр.: \#n.

#”””…”””#

тоже самое для многострочных строк.

Конкатенация

Объединение двух строк с помощью оператора + или +=.

.append(someCharacter) - добавить к строке символ

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

Интерполяция

Построение строки с константами, переменными, литералами или выражениями.

\(someVariable) - для добавления в строку константы или переменной

\(5 + 4) - добавление в строку выражения

Unicode

Международный стандарт для кодирования, представления и обработки текста. Позволяет использовать практически любой символ из любого языка в стандартной форме. 

String построен на базе скалярный значений Unicode. 

Скалярное значение - уникальный 21-битный номер для символа. Не всем номерам присвоены символы. Значения, которым присвоен символ, обычно имеют названия.

Каждый Character представляет собой один расширенный кластер графем - последовательность одного или нескольких скаляров Unicode, которые создают символ, напр. ä. Этот символ может быть представлен как самостоятельное значение Unicode или как кластер нескольких значений. 

При вычислении свойства .count, происходит итерация по всей строке для подсчета кластеров (без учета количества символов в одном кластере). 

Символы Swift занимают разный объем памяти по той же причине - разное количество скаляров в кластере.

Значение свойства .count может не совпадать со значением свойства .lenght для NSString, так как длина считает количество 16-битных скаляров в строке, а не кластеров.

Доступ и модификация

.isEmpty

проверяет пустая ли строка, возвращает Bool значение.

for-in

для итерации по строке, как массиву Characters

.count

число символов в строке

Из-за разного объема памяти, занимаемого символами, нельзя получить доступ по индексу напрямую. 

.startIndex

первый символ строки

.endIndex

позиция после последнего индекса строки, нельзя получить значение, потому что выходит за пределы массива. 

.index(before: ), .index(after: )

позиция до и после заданного индекса

.index(_: offsetBy: )

для получения доступа к индексу, находящемуся дальше от заданного на заданное количество значений

.indices

свойство для получения всех индексов отдельных символов строки

.insert(_: at: )

вставить символ в позицию с указанным индексом

.insert(contentsOf: at: )

вставить строку в позицию с указанным индексом

.remove(at: )

удалить символ по указанному индексу

.removeSubrange(_: )

удалить сабстринг в указанном диапазоне

Substrings

Часть строки, которая получается из String при использовании сабскриптов или некоторых методов. Можно работать как и с String типом. Используются только во время проведения неких действий со строкой, для хранения окончательного результата необходимо преобразовать в String. Подстрока может использовать часть памяти, которая выделена для исходной строки или другой подстроки. Исходная строка должна хранится в памяти, пока используется любая из ее подстрок.

Сравнение строк

Строки равны если их расширенные кластеры графем канонически эквивалентны, т.е. Имеют одинаковое лингвистическое значение и вид, даже если составлены их разных скаляров. Латинские и кириллические символы, имеющие одинаковый внешний виде не равны, т.к. имеют разное лингвистическое значение.

.hasPrefix(_: ), .hasSuffix(_: ) - принимают String аргумент, возвращают Bool. Проверяют, включает ли в себя строка соответсвующий префикс или суффикс.

Представление строк в Unicode

При записи строки Unicode в текстовый файл или др. Хранилище, все скаляры кодируются в одну из нескольких форм. Каждая из форм кодирует строку небольшими фрагметами (единицами кода) : UTF-8 (8-битные единицы кода и т.д.), UTF-16, UTF-32. 

Для получения доступа к представлению строк в Unicode: 

.utf8, .utf16, .unicodeScalars (для 32-битной формы кодирования или 21-битному значению Unicode).

Каждый UnicodeScalar имеет значение .value, которое представляет собой UInt32 значение скаляра. 

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.