Swift Academy · Урок

Иерархии Sequence и Collection

Разберитесь с различиями между Sequence и Collection (а также Bidirectional и RandomAccess): гарантиями обхода, индексами и случаями, когда алгоритмам нужны более строгие протоколы.

Урок 1 из 38 шагов

«Иерархии Sequence и Collection» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.

Карта иерархии

Иерархия перебираемых типов:

  • Последовательность: перебор через итератор (может поддерживать только один проход).
  • Коллекция: несколько проходов, доступ по индексам (startIndex/endIndex).
  • BidirectionalCollection: позволяет перемещать индексы назад.
  • RandomAccessCollection: обеспечивает переходы по индексам за постоянное время.

Перебор последовательности

Последовательность гарантирует, что элементы можно перебирать по порядку; требования к индексам и возможности нескольких проходов отсутствуют.

let seq = [1, 2, 3] as AnySequence<Int>    // wrap as AnySequence for demo
for x in seq { print(x, terminator: " ") }
print("")

Индексы коллекции

Коллекция добавляет индексы и позволяет выполнять несколько проходов. Вы можете безопасно повторить перебор.

let arr = ["a","b","c"]          // Array is a Collection
print(arr.startIndex == 0)            // true for Array
print(arr.endIndex == 3)              // endIndex is "one past last"
for i in arr.indices { print(arr[i], terminator: " ") }
print("")
// Iterate again (multi-pass)
for ch in arr { print(ch, terminator: " ") }
print("")

Более широкие возможности

BidirectionalCollection позволяет перемещать индексы назад. RandomAccessCollection поддерживает переходы по индексам за постоянное время (например, в массиве).

let text = "Swift"                         // String is a BidirectionalCollection
var i = text.index(before: text.endIndex)       // move backward
print(text[i])                                   // last character
// Array is RandomAccessCollection: jumping indices is cheap
let nums = [10,20,30,40]
print(nums[nums.startIndex.advanced(by: 2)])     // 30

Пользовательская последовательность

Пользовательская последовательность может поддерживать только один проход. После однократного перебора итератор может оказаться исчерпанным.

struct Countdown: Sequence, IteratorProtocol {
    var current: Int
    mutating func next() -> Int? {
        guard current >= 0 else { return nil }
        defer { current -= 1 }
        return current
    }
}
var cd = Countdown(current: 3)
for n in cd { print(n, terminator: " ") }   // 3 2 1 0
print("")
// cd is exhausted; iterating again yields nothing (single-pass behavior)

Выбор подходящего протокола

Рекомендации:

  • Используйте обобщённые алгоритмы для последовательности, когда достаточно одного прохода.
  • Требуйте коллекцию для нескольких проходов или операций с индексами.
  • Предпочитайте RandomAccessCollection для алгоритмов, которые часто переходят между индексами (например, для двоичного поиска).

Коллекция и последовательность

Быстрая проверка: что коллекция добавляет к последовательности?

Повторение

Повторение: последовательность → базовый перебор. Коллекция → индексы и несколько проходов. Двунаправленная коллекция → перемещение назад. Коллекция с произвольным доступом → переходы по индексам за постоянное время. Выбирайте минимально необходимый для алгоритма протокол.

Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Иерархии Sequence и Collection» бесплатный?

Да — полный текст урока «Иерархии Sequence и Collection» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.

Чему я научусь в уроке «Иерархии Sequence и Collection»?

Разберитесь с различиями между Sequence и Collection (а также Bidirectional и RandomAccess): гарантиями обхода, индексами и случаями, когда алгоритмам нужны более строгие протоколы. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.

Сколько времени занимает урок «Иерархии Sequence и Collection»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Иерархии Sequence и Collection
  2. Map/Filter/Reduce, ленивые последовательности
  3. Пользовательские итераторы и советы по производительности
← Назад к Swift Academy