Sobes.tech
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)
გადაცემა მნიშვნელობის კოპირება ბმულის (მიხედვის) კოპირება
მეხსიერება გამოყოფილია სტეკზე (სუფთა შემთხვევებისთვის) გამოყოფილია ხუთზე
ერთობლივი გამოყენება თითოეულმა ცვლადმა აქვს თავისი კოპია რამდენიმე ცვლადი შეიძლება მიუთითებდეს ერთ მაგალითზე
მუტაბელობა ცვლილებისთვის საჭიროა კოპიის შეცვლა ცვლილება ერთ ბმულზე ჩანს ყველა სხვა ბმულზე

iOS-ის განვითარებაში ხშირად გამოიყენება ორივე ტიპი. მათი განსხვავებების ცოდნით, შესაძლებელია აირჩიოთ შესაბამისი ტიპი კონკრეტული ამოცანისთვის და თავიდან აიცილოთ არასასურველი გვერდითი ეფექტები, განსაკუთრებით მუტაბელური მონაცემების მუშაობისას.