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