Sobes.tech
Junior

Тафовут байни синфҳо ва структураҳо дар забони барномасозии Swift чист?

sobes.tech AI

Ҷавоб аз AI

Классҳо навъҳои истинодӣ мебошанд, сохторҳо — навъҳои арзишӣ.

Фарқиятҳои асосӣ:

  • Наследувӣ: Классҳо наслеҳро дастгирӣ мекунанд, сохторҳо — не.
  • Трансформатсияи навъ: Имкон медиҳад, ки навъи намунаи классро дар вақти иҷро санҷида ва фаҳмид.
  • Деинициализация: Классҳо дорои deinit барои озод кардани захираҳо мебошанд, сохторҳо — не.
  • Шумораи истинодҳо: Классҳо аз ҳисобкунии автоматии истинодҳо (ARC) барои идоракунии хотира истифода мебаранд. Сохторҳо дар вақти гузариш ё таъин кардан нусхабардорӣ мешаванд (мумкин аст copy-on-write барои оптимизатсия истифода шавад).
  • Методҳои мутатаввиқ: Методҳое, ки хусусиятҳои намунаи сохтор ё enumeration-ро тағйир медиҳанд, бояд бо калиди mutating ишора шаванд. Барои классҳо ин зарур нест.

Масалан барои эҷод:

// Сохтор
struct Point {
    var x: Int
    var y: Int
}

// Класс
class Circle {
    var radius: Double
    var center: Point

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

Масалан дар вақти таъин:

// Сохтор
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Нусха гирифта мешавад
point2.x = 10

print(point1.x) // Баромад: 1

// Класс
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Ишора ба манба
circle2.radius = 10.0

print(circle1.radius) // Баромад: 10.0