Какие типы, кроме классов, являются ссылочными (Reference Type) в Swift?

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

Ответ

В Swift к Reference Type (ссылочным типам), помимо классов (class), относятся:

  1. Замыкания (Closures) Функции и замыкания являются ссылочными типами. При захвате значений из окружающего контекста (capture list) они хранят на них сильные ссылки, что может привести к циклам удержания.

    let closure: () -> Void
    // Переменная `closure` хранит ссылку на объект замыкания в куче.
  2. Актёры (Actors) (появились в Swift 5.5) Актёры — это ссылочный тип, предназначенный для безопасного доступа к изолированному состоянию из параллельных задач. Они обеспечивают безопасность данных в условиях многопоточности.

    actor Counter {
        private var value = 0
        func increment() { value += 1 }
    }
    // `Counter` — reference type с гарантиями изоляции.

Ключевые характеристики Reference Types:

  • Передача по ссылке: При присваивании или передаче в функцию копируется только ссылка на один и тот же экземпляр в памяти.
  • Управление памятью: Используется подсчет ссылок (ARC).
  • Идентичность: Проверяется оператором ===.

Важно: Протоколы (protocol), перечисления (enum) и структуры (struct) являются Value Types (значимыми типами), даже если они содержат или используются со ссылочными типами внутри.