Sobes.tech
Junior

Quelle est la différence entre les types de référence et les types de valeur?

sobes.tech IA

Réponse de l'IA

Les types de valeur (Value Types) sont copiés lors de l'affectation ou du passage à une fonction. Chaque instance possède sa propre copie des données.

Les types de référence (Reference Types) lors de l'affectation ou du passage à une fonction, transmettent une référence à la même instance de données. Modifier les données via une référence affectera toutes les autres références à cette même instance.

Caractéristique Type de valeur (Value Type) Type de référence (Reference Type)
Comportement lors de l'affectation/passage Copie Passage de la référence
Emplacement en mémoire Pile (Heap) Tas (Stack)
Gestion de la mémoire Automatique (via la pile) Automatique (ARC)
Exemples en Swift struct, enum, tuple class, func, closure
// Exemple de Type de Valeur (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtient une copie de p1
p2.x = 10   // Modifier p2 n'affecte pas p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Exemple de Type de Référence (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 référence le même objet que c1
c2.x = 10   // Modifier c2 affecte c1, car ils pointent vers le même objet
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10