Sobes.tech
Junior

Na czym polega różnica między klasami a strukturami w języku Swift?

sobes.tech AI

Odpowiedź od AI

Klasy to typy odwołań, struktury to typy wartości.

Główne różnice:

  • Dziedziczenie: Klasy obsługują dziedziczenie, struktury nie.
  • Rzutowanie typu: Pozwala na sprawdzanie i interpretację typu instancji klasy podczas działania programu.
  • Deinitialization: Klasy mają destruktory (deinit) do zwalniania zasobów, struktury nie.
  • Liczenie odwołań: Klasy używają automatycznego licznika odwołań (ARC) do zarządzania pamięcią. Struktury są kopiowane przy przekazywaniu lub przypisywaniu (może stosować copy-on-write dla optymalizacji).
  • Metody mutujące: Metody zmieniające właściwości instancji struktury lub wyliczenia muszą być oznaczone słowem kluczowym mutating. Dla klas nie jest to konieczne.

Przykład tworzenia:

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

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

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

Przykład zachowania przy przypisaniu:

// Struktura
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Tworzy kopię
point2.x = 10

print(point1.x) // Wypisze: 1

// Klasa
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Przypisanie referencyjne
circle2.radius = 10.0

print(circle1.radius) // Wypisze: 10.0