Swift. Строки. Графем-кластер

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
(Created page with "<div style='max-width:700px;text-align:justify;'> Назад · Оглавление · [[Swift....")
 
Line 2: Line 2:
 
[[Swift. Строки. Character в составе String|Назад]] ·
 
[[Swift. Строки. Character в составе String|Назад]] ·
 
[[Swift|Оглавление]] ·
 
[[Swift|Оглавление]] ·
[[Swift. Строки. ?|Дальше]]
+
[[Swift. Строки. Индекс элемента|Дальше]]
  
  
Line 82: Line 82:
 
[[Swift. Строки. Character в составе String|Назад]] ·
 
[[Swift. Строки. Character в составе String|Назад]] ·
 
[[Swift|Оглавление]] ·
 
[[Swift|Оглавление]] ·
[[Swift. Строки. ?|Дальше]]
+
[[Swift. Строки. Индекс элемента|Дальше]]
 
</div>
 
</div>

Revision as of 18:51, 20 March 2022

Назад · Оглавление · Дальше


Кодовая точка

String - коллекция, каждый элемент которой представлен индексом и значением типа Character.

Для описания символа можно использовать юникод-скаляр:

var char1: Character = "\u{E9}"  // E9 - кодовая точка

char1  // "é"

Данный символ можно описать иначе:

var char2: Character = "\u{65}\u{301}"  // два юникод-скаляра и две кодовые точки

char2  // "é"

Не смотря на разное количество кодовых точек, обе переменные хранят символ "é":

char1 == char2  // true

В переменной char2 хранится комбинированный символ, состоящий из двух кодовых точек:

\u{65}  - латинская буква e
\u{301} - модифицирующий символ "знак ударения"

Графем-кластер

Графем-кластер - совокупность юникод-скаляров (кодовых точек), формирующих один символ.

Графем-кластер может состоять из одного или двух юникод-скаляров.

Графем-кластер описывает значение параметров Character, например, эмодзи:

var thumbsUp = "\u{1f44d}"          // Thumbs up sign (палец вверх)

var blackSkin = "\u{1f3fd}"         // Emoji Modifier Fitzpatrick Type-4 (цвет кожи)

var combine = "\u{1f44d}\u{1f3fd}"  // палец вверх со средиземноморским цветом кожи

Каждый символ имеет кодовую точку и уникальное название:

1f44d - "Thumbs up sign"

Модифицирующий символ в строке:

let a = "caf\u{E9}"    // "café"   é - \u{E9}
let b = "cafe\u{301}"  // "café"   é - e + \u{301}

a.count  // 4
b.count  // 4

В переменной b пять символов, но b.count возвращает четыре.
Причина в том, что строка - это коллекция графем-кластеров, а не символов.

Время подсчета количества символов в строке, растет линейно с увеличением количества символов.
Для вычисления всех графем-кластеров (один или два юникод-скаляра) необходимо пройти всю коллекцию.

Использование графем-кластеров - причина отсутствия доступа к символу через целочисленный индекс.
Вместо основного символа, индекс может указать на модифицирующий символ в составе графем-кластера.

Для доступа к элементу строки, необходимо пройти все элементы слева от него,
только так можно получить корректный графем-кластер.

Тем не менее, строка - это упорядоченная коллекция, каждый элемент которой имеет значение Character и индекс, указывающий положение элемента в коллекции.



Назад · Оглавление · Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools