Sobes.tech
Junior

Qual è la differenza tra tipi di riferimento e tipi di valore?

sobes.tech AI

Risposta dell'AI

I tipi di valore (Value Types) vengono copiati durante l'assegnazione o il passaggio a una funzione. Ogni istanza ha una propria copia dei dati.

I tipi di riferimento (Reference Types), durante l'assegnazione o il passaggio a una funzione, passano un riferimento alla stessa istanza di dati. La modifica dei dati tramite una referenza si rifletterà su tutte le altre referenze a quella stessa istanza.

Caratteristica Tipo di valore (Value Type) Tipo di riferimento (Reference Type)
Comportamento in assegnazione/passaggio Copia Passaggio di riferimento
Posizione in memoria Stack (Heap) Heap (Stack)
Gestione della memoria Automatica (tramite stack) Automatica (ARC)
Esempi in Swift struct, enum, tuple class, func, closure
// Esempio di Tipo di Valore (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 ottiene una copia di p1
p2.x = 10   // La modifica di p2 non influisce su p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Esempio di Tipo di Riferimento (Classe)
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 riferisce allo stesso oggetto di c1
c2.x = 10   // La modifica di c2 influisce su c1, poiché entrambi puntano allo stesso oggetto
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10