Чӣ гуна метавон намудҳои додаҳоро, ки асосан ба истинодҳо асос ёфтаанд, аз намудҳои додаҳое, ки арзишҳоро мустақиман нигоҳ медоранд, фарқ кард?
sobes.tech AI
Ҷавоб аз AI
Дар iOS (Swift ва Objective-C) намудҳои додаҳо ба намудиҳои арзишӣ (value types) ва намудиҳои истинодӣ (reference types) тақсим мешаванд.
-
Намудиҳои арзишӣ маълумотҳоро мустақиман нигоҳ медоранд. Ҳангоми таъин кардан ё гузоштан ба функсия, нусхаи маълумотҳо сохта мешавад. Дар Swift, инҳо структураҳо (
struct), enumeration-ҳо (enum) ва намудҳои асосӣ, масалан,Int,Double,Boolмебошанд. -
Намудиҳои истинодӣ ба минтақаи хотира, ки маълумотҳо дар он ҷойгир шудаанд, ишора мекунанд. Ҳангоми таъин кардан, ишора нусхабардорӣ мешавад, на маълумотҳо. Тағйирот тавассути як ишора дар дигар ҷойҳо ҳам дида мешавад. Дар Swift, инҳо синфҳо (
class) мебошанд.
Чӣ гуна онҳоро фарқ кардан:
- Дар Swift, агар намуд ҳамчун
structёenumэълон шавад, ин намуди арзишӣ аст. - Агар ҳамчун
classэълон шавад, ин намуди истинодӣ мебошад.
Масалан:
struct Point {
var x: Int
var y: Int
}
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - нусха тағйир наёфтааст
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - ҳар ду тағйирёбанда ба як объект ишора мекунанд
Бо ҳамин, бо таваҷҷӯҳ ба рафтор дар вақти таъин ва тағйирот, намудҳои асосёфта ба ишора ва намудҳои ки мустақиман арзишҳоро нигоҳ медоранд, фарқ кардан мумкин аст.