Semántica rápida con respecto al acceso al diccionario

Actualmente estoy leyendo el excelenteSwift avanzado libro de objc.io, y me encuentro con algo que no entiendo.

Si ejecuta el siguiente código en un patio de juegos, notará que al modificar una estructura contenida en un diccionario, el acceso de subíndice hace una copia, pero luego parece que el valor original en el diccionario se reemplaza por la copia. No entiendo por qué. ¿Qué está pasando exactamente?

Además, ¿hay alguna forma de evitar la copia? Según el autor del libro, no lo hay, pero solo quiero estar seguro.

import Foundation

class Buffer {
    let id = UUID()
    var value = 0

    func copy() -> Buffer {
        let new = Buffer()
        new.value = self.value
        return new
    }
}

struct COWStruct {
    var buffer = Buffer()

    init() { print("Creating \(buffer.id)") }

    mutating func change() -> String {
        if isKnownUniquelyReferenced(&buffer) {
            buffer.value += 1
            return "No copy \(buffer.id)"
        } else {
            let newBuffer = buffer.copy()
            newBuffer.value += 1
            buffer = newBuffer
            return "Copy \(buffer.id)"
        }
    }
}

var array = [COWStruct()]
array[0].buffer.value
array[0].buffer.id
array[0].change()
array[0].buffer.value
array[0].buffer.id


var dict = ["key": COWStruct()]
dict["key"]?.buffer.value
dict["key"]?.buffer.id
dict["key"]?.change()
dict["key"]?.buffer.value
dict["key"]?.buffer.id

// If the above `change()` was made on a copy, why has the original value changed ?
// Did the copied & modified struct replace the original struct in the dictionary ?

Respuestas a la pregunta(1)

Su respuesta a la pregunta