В каких сценариях следует использовать reference types (классы) в Swift?

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

Ответ

Reference types (классы) следует использовать, когда требуется разделяемое, изменяемое состояние или наследование.

Основные сценарии применения:

  1. Общее состояние: Когда несколько частей кода должны работать с одним и тем же экземпляром и видеть его изменения.
    class SharedConfig {
        var settings: [String: Any] = [:]
    }
    let config = SharedConfig()
    // Множество объектов могут ссылаться на `config` и изменять его `settings`
  2. Наследование и полиморфизм: Для создания иерархий классов и переопределения методов.
  3. Интеграция с Objective-C: Многие API Cocoa и CocoaTouch ожидают наследников NSObject.
  4. Управление жизненным циклом вручную: Когда необходимо явное управление памятью (редкий случай).

Пример разделяемого состояния:

class Counter {
    var value = 0
}
let counterA = Counter()
let counterB = counterA // Обе переменные ссылаются на один экземпляр
counterA.value += 1
print(counterB.value) // Выведет: 1

Важное предупреждение: При использовании классов необходимо избегать циклов сильных ссылок, используя weak или unowned для ссылок, которые могут их создавать.