Swift. Строки. Индекс элемента
Назад · Оглавление · Дальше
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 } Консоль: Е в а н г е л и е
Назад · Оглавление · Дальше