Sobes.tech
Middle

Quelle est la différence entre copier un tableau et des structures en Swift?

sobes.tech IA

Réponse de l'IA

La copie d'un tableau en Swift crée une nouvelle copie indépendante de tout le contenu. Les modifications dans le tableau d'origine n'affectent pas la copie, et vice versa.

La copie d'une structure en Swift crée également une nouvelle copie de toutes ses propriétés. Si la structure contient des types de référence imbriqués (par exemple, des classes), la référence à cet objet est copiée, pas l'objet lui-même. Les modifications dans le type de référence à l'intérieur de la structure copiée se reflètent dans l'original.

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

// Copier une structure
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Copier la structure
point2.x = 30
print(point1.x) // Affichera 10 (point1 n'a pas changé)

class Container {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

struct HasReference {
    var data: Container
}

// Copier une structure avec un type de référence
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Copier la structure
ref2.data.value = 200 // Modifier le type de référence à l'intérieur de la structure
print(ref1.data.value) // Affichera 200 (le changement s'est reflété)

// Copier un tableau (par valeur)
var array1 = [1, 2, 3]
var array2 = array1 // Copier le tableau
array2[0] = 10
print(array1[0]) // Affichera 1 (la modification dans array2 n'a pas affecté array1)

// Copier un tableau contenant des types de référence
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Copier le tableau (les références sont copiées)
containers2[0].value = 10 // Modifier via la référence dans array2
print(containers1[0].value) // Affichera 10 (la modification s'est reflétée dans array1)

Caractéristique Tableau Structure (sans propriétés de référence) Structure (avec propriétés de référence)
Principe de copie Par valeur (copie superficielle) Par valeur Par valeur (les références sont copiées)
Indépendance des copies Indépendantes par contenu Indépendantes par toutes les propriétés Indépendantes par propriétés-valeurs, dépendantes par propriétés de référence
Copie profonde Nécessite une implémentation explicite Naturellement Nécessite une implémentation explicite pour les propriétés de référence