Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : string, unicode

Как устроен String? Почему нельзя обратиться по индексу?

Этот вопрос проверяет понимание внутреннего устройства строк в Swift и причин, по которым прямой доступ по индексу невозможен.

Короткий ответ

Строки в Swift представляют собой Unicode-корректные последовательности символов, которые могут иметь переменную длину в байтах. Прямой доступ по индексу невозможен из-за переменной длины графемовых кластеров — необходимо использовать String.Index для безопасного доступа.

Длинный ответ

Строки в Swift designed to be Unicode-correct and efficient.

1. Устройство:

  • Хранятся в виде UTF-8 или UTF-16, в зависимости от содержимого.

  • Могут быть stack-allocated для коротких строк или heap-allocated для длинных.

  • Поддерживают графемовые кластеры (например, эмодзи из нескольких code points).

2. Почему нет прямого доступа по индексу:

  • Символы (Characters) имеют переменную длину в байтах.

  • Прямой доступ по integer индексу would be O(n) из-за необходимости подсчитывать графемы.

  • Используется String.Index, который internally хранит offset и валидируется.

Пример:

let str = "Hello"
let index = str.index(str.startIndex, offsetBy: 2)
print(str[index]) // "l"
  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Swift

    Swift

Ключевые слова

#string

#unicode

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.