Swift. Строки. Индекс элемента

From AsIsWiki
Revision as of 18:51, 20 March 2022 by Alex (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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


Contents

startIndex

Индекс первого элемента строки:

let s = "e\u{301}lastic"  // "élastic" (первый графем-кластер стоит из двух символов)

var index = s.startIndex  // String.Index

Свойство startIndex возвращает индекс первого графем-кластера, состоящего из двух символов.
Значение индекса посмотреть нельзя, но можно использовать для получения первой буквы строки:

let char = s[index]

char            // "é" - первый символ строки

type(of: char)  // Character.Type

char имеет тип Character, т.е. строка - это коллекция Character

Тип данных индекса:

type(of: index)  // String.Index.Type

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

endIndex

Свойство endIndex возвращает индекс, следующий за последним символом в строке:

var endIndex = s.endIndex

s[endIndex]  // Fatal error: String index is out of bounds

// endIndex указывает на позицию, предполагаемую для добавления нового графем-кластера (новой буквы)

index(before:)

Метод index(before:) возвращает индекс предыдущего (от указанного в аргументе) символа:

var lastChar = s.index(before: endIndex)

s[lastChar]  // "c" - последний символ строки

index(after:)

Метод index(after:) возвращает индекс следующего (от указанного в аргументе) символа:

var nextIndex = s.index(after: s.startIndex)

s[nextIndex]  // "l"

s  // "élastic"

index(_:offsetBy:)

Метод index(_:offsetBy:) возвращает символ по указанному смещению.

Первый аргумент - индекс графем-кластера, от которого выполняется смещение,
второй аргумент offsetBy - целое число, указывающее на смещение вправо:

var offsetIndex = s.index(s.startIndex, offsetBy:3)

s[offsetIndex]  // "s"

s  // "élastic"

unicodeScalars

Свойство unicodeScalars содержит коллекцию юникод-скаляров, из которых состоит строка.

Количество элементов строки и количество юникод-скаляров из uncodeScalars, могут отличаться,
если в строке есть двух-символьные графем-кластеры:

s  // "élastic"

s.count                 // 7

s.unicodeScalars.count  // 8

s.unicodeScalars.count - цепочка вызовов. Длина цепочки не ограничена.

Пример

var s = "Евангелие"

var n = 0
for _ in s {
    let i = s.index(s.startIndex, offsetBy: n)
    let ch = s[i]
    print(ch, terminator: " ")
    n += 1
}

Консоль:
Е в а н г е л и е



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

Personal tools
Namespaces

Variants
Actions
Navigation
Tools