Почему стек в Swift часто реализуют как структуру (struct)?

«Почему стек в Swift часто реализуют как структуру (struct)?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стек, реализованный как структура (value type), соответствует принципу LIFO (Last In, First Out) и семантике копирования (value semantics) Swift, что предотвращает неожиданное разделение состояния.

Почему struct, а не class?

  • Value semantics: При присваивании или передаче в функцию создается копия, что безопасно для независимой работы с данными.
  • Управление памятью: Нет накладных расходов на подсчет ссылок (ARC).
  • Предсказуемость: Изменения внутри одного экземпляра не затрагивают другие.

Пример реализации стека через структуру:

struct Stack<Element> {
    private var elements = [Element]()

    mutating func push(_ element: Element) {
        elements.append(element)
    }

    mutating func pop() -> Element? {
        return elements.popLast()
    }

    func peek() -> Element? {
        return elements.last
    }
}

// Использование
var stack = Stack<Int>()
stack.push(1)
stack.push(2)
print(stack.pop()) // 2 (удален из этой копии)