Middle
Ποια είναι η διαφορά μεταξύ αντιγραφής ενός πίνακα και δομών στο Swift;
sobes.tech AI
Απάντηση από AI
Η αντιγραφή ενός πίνακα σε Swift δημιουργεί ένα νέο ανεξάρτητο αντίγραφο όλου του περιεχομένου. Οι αλλαγές στον αρχικό πίνακα δεν επηρεάζουν το αντίγραφο και το αντίστροφο.
Η αντιγραφή μιας δομής σε Swift δημιουργεί επίσης ένα νέο αντίγραφο όλων των ιδιοτήτων της. Εάν η δομή περιέχει ενσωματωμένους τύπους αναφοράς (π.χ. κλάσεις), αντιγράφεται η αναφορά σε αυτό το αντικείμενο, όχι το ίδιο το αντικείμενο. Οι αλλαγές στον τύπο αναφοράς μέσα στη δομημένη αντιγραφή αντικατοπτρίζονται στην αρχική.
struct Point {
var x: Int
var y: Int
}
// Αντιγραφή δομής
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Αντιγραφή δομής
point2.x = 30
print(point1.x) // Θα εμφανίσει 10 (το point1 δεν άλλαξε)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Αντιγραφή δομής με τύπο αναφοράς
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Αντιγραφή δομής
ref2.data.value = 200 // Αλλαγή του τύπου αναφοράς μέσα στη δομή
print(ref1.data.value) // Θα εμφανίσει 200 (η αλλαγή αντικατοπτρίζεται)
// Αντιγραφή πίνακα (κατά τιμή)
var array1 = [1, 2, 3]
var array2 = array1 // Αντιγραφή πίνακα
array2[0] = 10
print(array1[0]) // Θα εμφανίσει 1 (η αλλαγή στο array2 δεν επηρέασε το array1)
// Αντιγραφή πίνακα που περιέχει τύπους αναφοράς
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Αντιγραφή πίνακα (οι αναφορές αντιγράφονται)
containers2[0].value = 10 // Αλλαγή μέσω της αναφοράς στο array2
print(containers1[0].value) // Θα εμφανίσει 10 (η αλλαγή αντικατοπτρίζεται στο array1)
| Χαρακτηριστικό | Πίνακας | Δομή (χωρίς ιδιότητες αναφοράς) | Δομή (με ιδιότητες αναφοράς) |
|---|---|---|---|
| Αρχή αντιγραφής | Κατά τιμή (επιφανειακή αντιγραφή) | Κατά τιμή | Κατά τιμή (αντιγράφονται οι αναφορές) |
| Ανεξαρτησία αντιγράφων | Ανεξάρτητα κατά το περιεχόμενο | Ανεξάρτητα κατά όλες τις ιδιότητες | Ανεξάρτητα κατά ιδιότητες-τιμές, εξαρτώνται από ιδιότητες αναφοράς |
| Βαθιά αντιγραφή | Απαιτεί σαφή υλοποίηση | Φυσικά | Απαιτεί σαφή υλοποίηση για ιδιότητες αναφοράς |