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 commeInt,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
structouenum, 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.