Sobes.tech
Junior

რა არის განსხვავება მიმთითებელ ტიპებსა და მნიშვნელობის ტიპებს შორის?

sobes.tech AI

პასუხი AI-სგან

ღირებულების ტიპები (Value Types) ასახული ან გადაცემული ფუნქციაში იწერება. თითოეულ მაგალითს აქვს საკუთარი მონაცემების ასლი.

გაგზავნილი ტიპები (Reference Types) გადაცემის ან ასახვის დროს, გადაეცემა მონაცემების ერთსა და იმავე მაგალითზე მითითება. მონაცემების ცვლილება ერთ მითითებაზე აისახება ყველა სხვა მითითებაზე, რომელიც აღნიშნავს ამავე მაგალითს.

მახასიათებელი ღირებულების ტიპი (Value Type) მითითების ტიპი (Reference Type)
მოქმედება გადაცემის/შეთანხმების დროს ასლი მითითების გადაცემა
მეხსიერების განთავსება Stack (Heap) Heap (Stack)
მეხსიერების მართვა ავტომატური (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