Sobes.tech
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