Junior
Swift dasturlash tilida sinflar va tuzilmalar o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Sinflar - referans tiplari, tuzilmalar - qiymat tiplari.
Asosiy farqlar:
- Merosi: Sinflar meros olishni qo'llab-quvvatlaydi, tuzilmalar esa yo'q.
- Turni o'zgartirish: Bu, sinfa nusxa olish va uni ishga tushirish vaqtida turini tekshirish va tushunishga imkon beradi.
- Deinitialization: Sinflar resurslarni bo'shatish uchun
deinitdestruktorlariga ega, tuzilmalar esa yo'q. - Manba hisoblash: Sinflar avtomatik manba hisoblash (ARC) yordamida xotira boshqaruvini amalga oshiradi. Tuzilmalar nusxa ko'chiriladi yoki tayinlanadi (optimizatsiya uchun copy-on-write qo'llanilishi mumkin).
- Mutating metodlar: Tuzilma yoki enum nusxasining xususiyatlarini o'zgartiradigan metodlar
mutatingkalit so'zi bilan belgilanishi kerak. Sinflar uchun bu shart emas.
Yaratish misoli:
// Tuzilma
struct Point {
var x: Int
var y: Int
}
// Sinf
class Circle {
var radius: Double
var center: Point
init(radius: Double, center: Point) {
self.radius = radius
self.center = center
}
}
Tayinlashda xulq-atvor misoli:
// Tuzilma
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Nusxa olinadi
point2.x = 10
print(point1.x) // Chiqarish: 1
// Sinf
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Manba tayinlash
circle2.radius = 10.0
print(circle1.radius) // Chiqarish: 10.0