Sobes.tech
Junior

Kuo skiriasi klasės ir struktūros Swift programavimo kalboje?

sobes.tech AI

Atsakymas iš AI

Klasės yra nuorodų tipai, struktūros — reikšmių tipai.

Pagrindiniai skirtumai:

  • Paveldėjimas: Klasės palaiko paveldėjimą, struktūros — ne.
  • Tipų keitimas: Leidžia patikrinti ir interpretuoti klasės egzemplioriaus tipą vykdymo metu.
  • Deinitialization: Klasės turi deinit destruktorius resursų atlaisvinimui, struktūros — ne.
  • Atminties skaičiavimas: Klasės naudoja automatinį nuorodų skaičiavimą (ARC) atminties valdymui. Struktūros kopijuojamos perduodant ar priskiriant (gali būti taikomas copy-on-write optimizacijai).
  • Mutuojančios metodai: Metodai, keičiantys struktūros ar enum egzemplioriaus savybes, turi būti pažymėti mutating. Klasėms tai nėra būtina.

Pavyzdys kūrimui:

// Struktūra
struct Point {
    var x: Int
    var y: Int
}

// Klasė
class Circle {
    var radius: Double
    var center: Point

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

Veikimo pavyzdys priskyrimo metu:

// Struktūra
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Kopija
point2.x = 10

print(point1.x) // Išvestis: 1

// Klasė
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Nuoroda
circle2.radius = 10.0

print(circle1.radius) // Išvestis: 10.0