Кратко и только главное из 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 значение скаляра.