Sobes.tech
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 deinit destruktorlariga 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 mutating kalit 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