Sobes.tech
Junior

Qual è la differenza tra classi e strutture nel linguaggio di programmazione Swift?

sobes.tech AI

Risposta dell'AI

Le classi sono tipi di riferimento, le strutture sono tipi di valore.

Principali differenze:

  • Ereditarietà: Le classi supportano l'ereditarietà, le strutture no.
  • Casting di tipo: Permette di verificare e interpretare il tipo di un'istanza di classe a runtime.
  • Deinitialization: Le classi hanno deinit per liberare risorse, le strutture no.
  • Contatore di riferimenti: Le classi usano ARC per la gestione della memoria. Le strutture vengono copiate durante il passaggio o l'assegnazione (può usare copy-on-write per ottimizzazione).
  • Metodi mutanti: I metodi che modificano le proprietà di un'istanza di struttura o enum devono essere marcati con mutating. Per le classi, non è necessario.

Esempio di creazione:

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

// Classe
class Circle {
    var radius: Double
    var center: Point

    init(radius: Double, center: Point) {
        self.radius = radius
        self.center = center
    }
}

Esempio di comportamento in assegnazione:

// Struttura
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Viene creata una copia
point2.x = 10

print(point1.x) // Output: 1

// Classe
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Assegnazione di riferimento
circle2.radius = 10.0

print(circle1.radius) // Output: 10.0