Какие reference types существуют в Swift?

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

Ответ

В Swift к reference types (типам-ссылкам) относятся:

  1. Классы (class):

    • Хранятся в куче (heap).
    • При присваивании или передаче в функцию копируется только ссылка на один и тот же экземпляр.
    • Управление памятью через ARC (Automatic Reference Counting).
      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"
  2. Замыкания (closure):

    • Также являются reference types.
    • Даже если захватывают value types (структуры), само замыкание размещается в куче.
  3. Акторы (actor):

    • Введены в Swift 5.5 для безопасной параллельной работы.
    • Являются reference types, но обеспечивают изоляцию (actor isolation), синхронизируя доступ к своим изменяемым свойствам.
      actor BankAccount {
      private var balance: Double = 0
      func deposit(_ amount: Double) { balance += amount }
      }

Контраст с Value Types: В отличие от структур (struct), перечислений (enum) и кортежей (tuple), изменение экземпляра reference type через одну ссылку влияет на все другие ссылки на этот объект.