Ответ
Классы (class) в Swift используются, когда требуется ссылочная семантика и управление идентичностью объекта.
Основные сценарии применения:
- Наследование: Когда нужно создать иерархию типов, где подклассы наследуют и переопределяют поведение родителя.
class Vehicle { var currentSpeed = 0.0 func makeSound() { print("...") } } class Car: Vehicle { var gear = 1 override func makeSound() { print("Vroom!") } } - Разделяемое состояние: Когда несколько частей кода должны ссылаться и модифицировать один и тот же экземпляр.
- Управление жизненным циклом: При необходимости выполнить cleanup в деинициализаторе (
deinit). - Совместимость с Objective-C: Если класс должен быть доступен в Objective-C-коде (наследуется от
NSObject).
Ключевое отличие от структур: Экземпляры класса передаются по ссылке. При присваивании или передаче в функцию создается новая ссылка на тот же объект в памяти.
Ответ 18+ 🔞
А, классы в Swift, ну это ж классика, блядь! Это когда тебе нужно, чтобы все твои переменные дружно смотрели на одну и ту же хуйню в памяти и дружно её же и меняли. Как в коммуналке, блядь: один срать пошёл — все знают.
Так когда же этот ваш class впендюрить?
- Наследование, ёпта! Вот это прям пиздец как иногда нужно. Сделал ты класс
Транспорт, а потом думаешь: "А машина-то что? Тоже транспорт, блядь!". И вот ты уже пишешьclass Машина: Транспорт, и она всё от родителя получает, а ещё и свою передачку может добавить. Красота, ебать!class Транспорт { var текущаяСкорость = 0.0 func издайЗвук() { print("...") } // Тишина, блядь, едет и молчит } class Машина: Транспорт { var передача = 1 override func издайЗвук() { print("Врум-врум!") } // А вот это уже наш клиент! } - Разделяемое состояние. Вот представь: у тебя есть
МенеджерДанных, один на весь апп. И все экраны, все кнопки — они все должны тыкать в один и тот же экземпляр, а не плодить сущностей. Вот тутclass— твой бро. Передал ссылку, и все довольны, все видят одни и те же данные. Пока не начнут одновременно писать, конечно, тогда пиздец, но это уже другая история. - Управление жизненным циклом. Слушай, а бывает же, что объект что-то делает — файлы открывает, сетевые соединения держит. И когда его убивают, надо всё аккуратно прибрать. Вот для этого в классе есть волшебный метод
deinit. Сказали объекту "пиздуй" — он на прощание успеет за всеми дверьми прикрыть. У структур такой фичи нет, они просто испаряются. - Совместимость с Objective-C. Ну это если ты, сука, мазохист и работаешь со старым легаси-кодом. Тогда твой класс должен быть от
NSObject, иначе старый код на тебя смотреть не будет, как на говно.
А главная разница с struct в чём? Да в том, блядь, что класс — это как визитка. Дал ты свою визитку десяти людям. Они все по ней звонят — звонят тебе одному. Изменил ты в визитке номер — у всех он автоматически меняется, пиздец! А структура — это как ксерокс. Сделал копию, отдал. У того человека свой листочек. Можешь на своём хоть хуй нарисовать — на его копии ничего не изменится. Вот и вся философия, в рот меня чих-пых!