Sobes.tech
Junior — Middle

Comment distinguer les types de données basés sur des références des types de données qui stockent des valeurs directement ?

sobes.tech IA

Réponse de l'IA

Dans iOS (Swift et Objective-C), les types de données sont divisés en types de valeur (value types) et types de référence (reference types).

  • Les types de valeur stockent directement les données. Lors de l'assignation ou du passage à une fonction, une copie des données est créée. En Swift, cela inclut les structures (struct), les énumérations (enum), ainsi que les types de base comme Int, Double, Bool.

  • Les types de référence stockent une référence à une zone mémoire où se trouvent les données. Lors de l'assignation, la référence est copiée, pas les données elles-mêmes. Les modifications via une référence sont visibles dans d'autres. En Swift, ce sont les classes (class).

Comment faire la différence :

  • En Swift, si un type est déclaré comme struct ou enum, c'est un type de valeur.
  • S'il est déclaré comme class, c'est un type de référence.

Exemple :

struct Point {
    var x: Int
    var y: Int
}

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - la copie n'a pas changé

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - les deux variables pointent vers le même objet

Ainsi, par le comportement lors de l'assignation et de la modification, on peut distinguer les types basés sur des références de ceux qui stockent directement des valeurs.