Реализован ли Copy-on-write для всех структур в Swift?

«Реализован ли Copy-on-write для всех структур в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. Copy-on-write (CoW) — это оптимизация, применяемая к конкретным стандартным типам, а не ко всем структурам по умолчанию.

Где CoW реализован:

  • Array, Dictionary, Set, String и их изменяющие подтипы (например, ContiguousArray).

Почему не везде: CoW добавляет накладные расходы на проверку уникальности ссылки. Для простых, небольших структур прямое копирование часто эффективнее.

Реализация CoW для пользовательской структуры: Требуется вручную обернуть данные в ссылочный тип и проверять уникальность.

final class Ref<T> {
    var value: T
    init(_ value: T) { self.value = value }
}

struct MyCoWStruct<T> {
    private var ref: Ref<T>

    init(_ value: T) {
        ref = Ref(value)
    }

    var value: T {
        get { ref.value }
        set {
            // Копируем данные только если есть другие ссылки на ref
            if !isKnownUniquelyReferenced(&ref) {
                ref = Ref(newValue)
                return
            }
            ref.value = newValue
        }
    }
}