Middle
Ի՞նչ է նշանակում, երբ արժեքի տիպը (value type) պատկանում է հղման տիպին (reference type):
sobes.tech AI
Պատասխան AI-ից
Արժեքի տիպը կոպիարվում է նշանակման կամ ֆունկցիային փոխանցման ժամանակ, մինչդեռ հղման տիպը փոխանցվում է հղումով, այսինքն՝ նշանագնացը կոպիարվում է առկա օրինակին:
Արժեքային Տիպեր (Value Types):
- Կառուցվածքներ (struct)
- Ցանկեր (enum)
- Թյուպլ (tuple)
- Ամենատարածված հիմնական տիպերը (Int, String, Bool, Array, Dictionary, Set և այլն)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p1 արժեքը կոպիարվում է p2-ին
p2.x = 10
// p1.x դեռևս 1 է, p2.x դարձել է 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")
Հղման Տիպեր (Reference Types):
- Սինֆոններ (class)
- Ֆունկցիաներ (closure)
class Coordinate {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 հղվում է նույն օրինակին, ինչ c1
c2.x = 10
// c1.x նույնպես դարձավ 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")
Հիմնական տարբերությունները:
| Գծագիր | Արժեքի Տիպ (Value Type) | Հղման Տիպ (Reference Type) |
|---|---|---|
| Հատկացում | Արժեքի կոպիա | Հղման (ցուցակի) կոպիա |
| Մეხանիզմ | Stack-ում է հատկացվում (հեշտ դեպքերում) | Heap-ում է հատկացվում |
| Կիսում | Ամեն փոփոխական ունի իր սեփական կոպիան | Բազմաթիվ փոփոխականներ կարող են հղում կատարել նույն օրինակին |
| Մուտաբելություն | Փոփոխության համար պետք է փոխել կոպիան | Փոփոխությունը մեկ հղումով բոլորին է տեսանելի |
iOS ծրագրավորման մեջ երկու տիպերն էլ հաճախ են օգտագործվում: Դրանց տարբերությունները իմանալով, կարող եք ընտրել համապատասխան տիպը կոնկրետ առաջադրանքի համար և խուսափել unwanted կողմնակի ազդեցություններից, հատկապես mutable տվյալների հետ աշխատելիս։