Sobes.tech
Junior

Ի՞նչ է Swift ծրագրավորման լեզվում դասերի և կառուցվածքների տարբերությունը։

sobes.tech AI

Պատասխան AI-ից

Դասերը հղումային տիպեր են, կառուցվածքները՝ արժեքային։

Հիմնական տարբերությունները՝

  • Արխայվավորում: Դասերը աջակցում է ժառանգությանը, կառուցվածքները՝ ոչ։
  • Տիպի փոխարկում: Позволяет ստուգել և մեկնաբանել դասի օրինակակի տիպը ժամանակի ընթացքում։
  • Deinitialization: Դասերը ունեն deinit դեինիցիալներ՝ ռեսուրսները ազատելու համար, կառուցվածքները՝ ոչ։
  • Հիշողության հաշվարկ: Դասերը օգտագործում են ARC՝ ավտոմատ ռեսուրսների հաշվարկ, կառուցվածքները՝ պատճենվում են փոխանցման կամ նշանակման ժամանակ (կարող է կիրառվել copy-on-write օպտիմիզացիայի համար):
  • Mutating մեթոդներ: Մեթոդները, որոնք փոփոխում են կառուցվածքի կամ enum-ի օրինակակի հատկությունները, պետք է նշվեն 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