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
deinitdestruktorius 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