Junior
Ποια είναι η διαφορά μεταξύ κλάσεων και δομών στη γλώσσα προγραμματισμού Swift;
sobes.tech AI
Απάντηση από AI
Οι κλάσεις είναι τύποι αναφοράς, οι δομές είναι τύποι τιμής.
Βασικές διαφορές:
- Κληρονομικότητα: Οι κλάσεις υποστηρίζουν κληρονομικότητα, οι δομές όχι.
- Τύπος Casting: Επιτρέπει τον έλεγχο και την ερμηνεία του τύπου μιας κλάσης κατά την εκτέλεση.
- Αποσύνδεση (Deinitialization): Οι κλάσεις έχουν καταστροφείς (
deinit) για απελευθέρωση πόρων, οι δομές όχι. - Αριθμός αναφορών: Οι κλάσεις χρησιμοποιούν αυτόματο αριθμό αναφορών (ARC) για διαχείριση μνήμης. Οι δομές αντιγράφονται κατά τη μεταβίβαση ή την ανάθεση (μπορεί να εφαρμόζεται copy-on-write για βελτιστοποίηση).
- Μεταβαλλόμενες μέθοδοι: Μέθοδοι που τροποποιούν τις ιδιότητες μιας δομής ή enumeration πρέπει να σημειώνονται με τη λέξη-κλειδί
mutating. Για τις κλάσεις, αυτό δεν είναι απαραίτητο.
Παράδειγμα δημιουργίας:
// Δομή
struct Point {
var x: Int
var y: Int
}
// Κλάση
class Circle {
var radius: Double
var center: Point
init(radius: Double, center: Point) {
self.radius = radius
self.center = center
}
}
Παράδειγμα συμπεριφοράς κατά την ανάθεση:
// Δομή
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Δημιουργείται αντίγραφο
point2.x = 10
print(point1.x) // Έξοδος: 1
// Κλάση
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Αναφορά
circle2.radius = 10.0
print(circle1.radius) // Έξοδος: 10.0