Какие типы данных используются для стандартных коллекций (Array, Dictionary, Set) в Swift?

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

Ответ

Стандартные коллекции Swift (Array, Dictionary, Set) реализованы как структуры (value types), а не как классы.

Ключевые последствия:

  • Семантика копирования при записи (Copy-on-Write): При присваивании создаётся логическая копия. Физическое копирование данных происходит только при изменении одной из переменных, что оптимизирует производительность.
  • Изоляция изменений: Модификация копии не затрагивает оригинал.

Пример:

var originalArray = [1, 2, 3]
var copiedArray = originalArray // Пока что это одна ссылка на данные (Copy-on-Write)
copiedArray.append(4) // Теперь происходит физическое копирование, и массивы расходятся
print(originalArray) // [1, 2, 3]
print(copiedArray)   // [1, 2, 3, 4]

Исключение: Классы из Foundation (NSArray, NSDictionary, NSSet) являются ссылочными типами. Их использование в чистом Swift-коде обычно не рекомендуется, если не требуется совместимость с Objective-C.