Чем отличаются структуры и классы

struct — value type. Копируются. Изменение одного инстанса не влияет на второй.

class — reference type. Передаются по ссылке. Изменение одного инстанса влечет за собой изменение второго.

Oct. 14, 2023, Источник

Структуры (`struct`) и классы (`class`) используются для создания сложных типов данных, но они имеют несколько ключевых отличий:

1. Тип значения против типа ссылки: Структуры являются типами значений, что означает, что когда вы передаете структуру функции или присваиваете её новой переменной, создается новая копия этой структуры. Классы же являются типами ссылок, так что когда вы передаете экземпляр класса функции или присваиваете его новой переменной, вы фактически передаете ссылку на тот же самый экземпляр.

```swift
struct MyStruct {
    var number: Int
}

var struct1 = MyStruct(number: 1)
var struct2 = struct1
struct2.number = 2
print(struct1.number) // Выводит 1, так как struct2 - это копия struct1

class MyClass {
    var number: Int

    init(number: Int) {
        self.number = number
    }
}

var class1 = MyClass(number: 1)
var class2 = class1
class2.number = 2
print(class1.number) // Выводит 2, так как class1 и class2 ссылаются на один и тот же экземпляр
```

2. Наследование: Классы поддерживают наследование, что позволяет одному классу наследовать характеристики другого. Структуры не поддерживают наследование. Это означает, что класс может иметь базовый класс, а структура - нет.

3. Деинициализаторы: Классы могут иметь деинициализаторы (`deinit`), которые выполняются перед тем, как экземпляр класса будет деаллоцирован. Структуры не могут иметь деинициализаторы.

4. Приведение типов: Можно проверять и приводить типы экземпляров классов в процессе выполнения с помощью ключевых слов `is` и `as`, что невозможно с экземплярами структур.

5. Ссылочная идентичность: Для классов можно использовать операторы идентичности (`===` и `!==`) для проверки того, ссылаются ли две переменные или константы на один и тот же экземпляр класса. Для структур это не применимо, так как они являются типами значений и не имеют семантики ссылочной идентичности.

Использование структур или классов зависит от конкретной задачи. Во многих случаях предпочтительнее использовать структуры из-за их простоты и безопасности работы с данными. Однако когда требуется использовать наследование, рабочие экземпляры с общим состоянием или контроль идентичности экземпляра, следует использовать классы.

Структуры являются типами значений и подходят для простых данных, не требующих наследования и совместного использования. Классы - типы ссылок, поддерживают наследование и используются, когда необходимо иметь общее состояние или контролировать идентичность.

April 10, 2024, easyoffer