Sobes.tech
Junior

¿Cuál es la diferencia entre tipos de referencia y tipos de valor?

sobes.tech AI

Respuesta de la IA

Los tipos de valor (Value Types) se copian al asignar o pasar a una función. Cada instancia tiene su propia copia de los datos.

Los tipos de referencia (Reference Types) al asignar o pasar a una función, se pasa una referencia a la misma instancia de datos. Cambiar los datos a través de una referencia afectará a todas las demás referencias a esa misma instancia.

Característica Tipo de valor (Value Type) Tipo de referencia (Reference Type)
Comportamiento al asignar/pasar Copia Pasa la referencia
Ubicación en memoria Pila (Heap) Montón (Stack)
Gestión de memoria Automática (a través de la pila) Automática (ARC)
Ejemplos en Swift struct, enum, tuple class, func, closure
// Ejemplo de Tipo de Valor (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtiene una copia de p1
p2.x = 10   // Cambiar p2 no afecta a p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Ejemplo de Tipo de Referencia (Clase)
class Coordinate {
    var x: Int
    var y: Int
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 referencia al mismo objeto que c1
c2.x = 10   // Cambiar c2 afecta a c1, ya que ambos apuntan al mismo objeto
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10