Sobes.tech
Junior

Фарқи байни навъҳои истинод ва навъҳои арзиш чист?

sobes.tech AI

Ҷавоб аз AI

Намудҳои арзиш (Value Types) ҳангоми таъин кардан ё гузаронидан ба функсия нусхабардорӣ мешаванд. Ҳар як намуна нусхаи хоси маълумот дорад.

Намудҳои истинод (Reference Types) ҳангоми таъин кардан ё гузаронидан ба функсия, ба намунаи маълумоти якхела ишора мекунанд. Тағйирот дар маълумот тавассути як ишора ба ҳамаи ишораҳои дигар ба ҳамин намуна таъсир мерасонад.

Хусусият Намуди арзиш (Value Type) Намуди истинод (Reference Type)
Равоншиканӣ дар таъин кардан/гузаронидан Нусхабардорӣ Ишорагузорӣ
Ҷойгиршавӣ дар хотира Стек (Heap) Ҳамвор (Stack)
Идоракунии хотира Автоматӣ (аз тариқи стек) Автоматӣ (ARC)
Масаланҳо дар Swift struct, enum, tuple class, func, closure
// Намунаи Намуди Арзиш (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 нусхаи p1-ро мегирад
p2.x = 10   // Тағйирот дар p2 ба p1 таъсир намерасонад
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Намунаи Намуди истинод (Класс)
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   // Тағйирот дар c2 ба c1 таъсир мерасонад, чунки ҳар ду ба як объект ишора мекунанд
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10