Sobes.tech
Junior

V čem spočívá rozdíl mezi třídami a strukturami v jazyce Swift?

sobes.tech AI

Odpověď od AI

Třídy jsou referenční typy, struktury jsou hodnotové typy.

Hlavní rozdíly:

  • Dědičnost: Třídy podporují dědičnost, struktury ne.
  • Typové přetypování: Umožňuje ověřit a interpretovat typ instance třídy za běhu.
  • Deinitialization: Třídy mají destruktory (deinit) pro uvolnění zdrojů, struktury ne.
  • Počítání odkazů: Třídy používají automatické počítání odkazů (ARC) pro správu paměti. Struktury se kopírují při předání nebo přiřazení (může být použito copy-on-write pro optimalizaci).
  • Mutující metody: Metody, které mění vlastnosti instance struktury nebo výčtu, musí být označeny klíčovým slovem mutating. U tříd to není nutné.

Příklad tvorby:

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

// Třída
class Circle {
    var radius: Double
    var center: Point

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

Příklad chování při přiřazení:

// Struktura
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Vytvoří se kopie
point2.x = 10

print(point1.x) // Výstup: 1

// Třída
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Odkaz
circle2.radius = 10.0

print(circle1.radius) // Výstup: 10.0