Выбор ответа Junior Коллекции и строки спрашивают часто обновлено

Почему s[0] не работает со String

Вопрос

Почему let c = s[0] для s: String не компилируется?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Символы разной длины, доступ по Int был бы O(n). Строка индексируется через String.Index: s[s.startIndex] или s[s.index(s.startIndex, offsetBy: 3)].

Варианты ответа

  1. Строки в Swift неизменяемы, и сабскрипт для них не определён вовсе
  2. Индексация строк начинается с 1, а не с 0, как у массивов
  3. Символы разной длины, доступ по Int был бы O(n)правильный ответ
  4. Нужно сначала вызвать s.lock(), чтобы зафиксировать буфер строки

Разбор

Строка индексируется через String.Index: s[s.startIndex] или s[s.index(s.startIndex, offsetBy: 3)]. Целочисленный сабскрипт не предоставлен намеренно: он выглядел бы как O(1), а на деле требовал бы прохода от начала. Строки бывают изменяемыми (var), индексация с нуля тут ни при чём, а lock() не существует.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.