К какому типу (value/reference) относятся классы в Swift?

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

Ответ

Классы в Swift являются reference type (ссылочным типом).

Семантика ссылки: При присваивании экземпляра класса новой переменной или передаче в функцию копируется ссылка на один и тот же объект в памяти. Все переменные ссылаются на одни и те же данные.

Пример:

class Person {
    var name: String
    init(name: String) { self.name = name }
}

let alice = Person(name: "Alice")
let bob = alice          // bob ссылается на тот же объект, что и alice
bob.name = "Bob"        // Меняем свойство объекта
print(alice.name)       // "Bob" - изменение видно через alice
Сравнение с Value Types (Структуры, Перечисления): Аспект Класс (Reference) Структура (Value)
Копирование Копируется ссылка Копируется всё значение
Изменение Изменения видны всем Изменения локальны для копии
Наследование Поддерживается Не поддерживается
Идентичность Проверяется === Сравнивается по значению ==

Управление памятью: Для экземпляров классов используется Automatic Reference Counting (ARC).