К какому типу данных относится класс в Swift?

Ответ

Класс в Swift — это ссылочный тип (reference type).

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

  • При присваивании экземпляра класса новой переменной или передаче в функцию копируется ссылка на один и тот же объект в памяти.
  • Несколько ссылок указывают на один экземпляр. Изменения, сделанные через одну ссылку, видны через все остальные.
  • Управление памятью осуществляется через ARC (Automatic Reference Counting).
  • Поддерживает наследование.

Пример, демонстрирующий ссылочную семантику:

class Vehicle {
    var speed: Int = 0
}

let car1 = Vehicle()
car1.speed = 100
let car2 = car1 // car2 — ссылка на тот же объект, что и car1
car2.speed = 200

print(car1.speed) // Вывод: 200. Изменение через car2 затронуло car1.

Ответ 18+ 🔞

Да ты посмотри, какой этот Swift хитрый! Вот берёшь ты класс — а он, сука, ссылочный тип, как прилипала какая-то.

Объясняю на пальцах, блядь. Представь, что ты купил одну бутылку пива. Это твой объект в памяти. Дал попить другу — он не новую бутылку получает, а ту же самую, ёпта! Вы оба держитесь за одну и ту же хреновину. Если он отхлебнёт — в бутылке меньше становится для всех, кто за неё держится. Вот и вся ссылочная магия, в рот меня чих-пых!

Короче, запомни:

  • Скопировал экземпляр класса — скопировал только бумажку с адресом, где этот объект лежит. Сам объект остался один, на него теперь два указателя.
  • Поменял что-то через одну переменную — все остальные, кто на этот объект смотрит, тут же это увидят. Сюрприз, блядь!
  • Памятью за тобой следит ARC, как надоедливая тёща, считает, кто на кого ссылается, чтобы не удалить раньше времени.
  • И да, классы умеют в наследование — можно нагородить овердохуища иерархий, если не осторожно.

Смотри, как это на практике выглядит, ёперный театр:

class Vehicle {
    var speed: Int = 0
}

let car1 = Vehicle()
car1.speed = 100
let car2 = car1 // Внимание! car2 — это не копия, а просто ещё одна бумажка с тем же адресом!
car2.speed = 200

print(car1.speed) // Вывод: 200. Ну вот, я же говорил! Изменение через car2 заебало значение и для car1. Один объект на двоих!

Вот так и живём. Сделал car2 — думал, свою тачку получил, а оказалось, ключи от той же самой, и кто-то уже педаль в пол вдавил. Пиздец, а не принцип.