Ինչպես է իրականացվում Swift-ում դասի և կառուցվածքի օբյեկտների դիմում?
sobes.tech AI
Պատասխան AI-ից
Օբյեկտների դասի համար՝ հղումով, կառուցվածքի օբյեկտների համար՝ արժեքով:
Դասեր (հղման տիպ):
Դասի օրինակին փոփոխականի կամ կոնստանտի վերագրումից հետո, վերագրում է նույն օրինակին հղում։ Փոփոխությունները, որոնք կատարվում են մեկ հղումով, կտեսնվեն բոլոր հղումներով, որոնք ցույց են տալիս այդ օրինակին:
class MyClass {
var value: Int = 0
}
let object1 = MyClass() // Օբյեկտի ստեղծում
let object2 = object1 // object2 այժմ ցույց է տալիս նույն օրինակին
object1.value = 10 // Փոփոխություն object1-ի միջոցով
print(object2.value) // Կարտադրվի 10 - փոփոխությունը տեսանելի է object2-ով
Կառուցվածքներ (արժեքային տիպ):
Կառուցվածքի օրինակին վերագրումից հետո, ստեղծվում է այդ օրինակի պատճենը։ Յուրաքանչյուր փոփոխական/կոնստանտ պարունակում է իր անկախ տվյալների պատճենը։ Փոփոխությունները մեկ պատճենում չեն ազդում մյուսների վրա:
struct MyStruct {
var value: Int = 0
}
var struct1 = MyStruct() // Օբյեկտի ստեղծում
var struct2 = struct1 // Ստեղծվում է struct1-ի պատճենը
struct1.value = 20 // Փոփոխություն struct1-ի միջոցով
print(struct2.value) // Կարտադրվի 0 - struct2-ը մնացել է անփոփոխ
Համեմատություն:
| Գծագիր | Դասեր | Կառուցվածքներ |
|---|---|---|
| Տիպ | Հղման | Արժեքային |
| Վերագրում | Հղման պատճեն | Արժեքի պատճեն |
| Փոփոխություններ | Տեսանելի են բոլոր հղումներով | Կենտրոնանում է միայն պատճենին |
| Ուղիղ ժառանգություն | Պատրաստ է | Չի աջակցվում |
| Իդենտիկություն | Կարող է ստուգվել (triple equals ===) |
Չկա իդենտիկության կոնցեպցիա |
Ընտրությունը դասի և կառուցվածքի միջև կախված է պահանջներից։ Կառուցվածքները հաճախ օգտագործվում են փոքր, պարզ տիպերի համար, որոնք ներկայացնում են արժեք (օրինակ՝ Point, Size, Range)։ Դասերը օգտագործվում են ավելի բարդ տիպերի համար, որոնք պահանջում են հղման սեմանտիկա, ժառանգություն կամ օբյեկտի կյանքի ցիկլի կառավարում (օրինակ՝ UIViewController, UIView)։