Ответ
Нет. 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
}
}
}