Middle
Koja je razlika između kopiranja niza i struktura u Swift-u?
sobes.tech АИ
Одговор од АИ
Копирање низа у Swift-у креира нову, независну копију целог садржаја. Промене у оригиналном низу не утичу на копију и обратно.
Копирање структуре у Swift-у такође креира нову копију свих њених својстава. Ако структура садржи угнежђене референтне типове (нпр. класе), копира се референца на тај објекат, а не сам објекат. Промене у референтном типу унутар копиране структуре одражавају се у оригиналу.
struct Point {
var x: Int
var y: Int
}
// Копирање структуре
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Копирање структуре
point2.x = 30
print(point1.x) // Исписаће 10 (point1 се није променио)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Копирање структуре са референтним типом
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Копирање структуре
ref2.data.value = 200 // Промена референтног типа унутар структуре
print(ref1.data.value) // Исписаће 200 (промена се одразила)
// Копирање низа (по вредности)
var array1 = [1, 2, 3]
var array2 = array1 // Копирање низа
array2[0] = 10
print(array1[0]) // Исписаће 1 (промена у array2 није утицала на array1)
// Копирање низа који садржи референтне типове
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Копирање низа (референце се копирају)
containers2[0].value = 10 // Промена преко референце у array2
print(containers1[0].value) // Исписаће 10 (промена се одразила у array1)
| Карактеристика | Низ | Структура (без референтних својстава) | Структура (са референтним својствима) |
|---|---|---|---|
| Принцип копирања | По вредности (површна копија) | По вредности | По вредности (копирају се референце) |
| Независност копија | Независне по садржају | Независне по свим својствима | Независне по својствима-вредностима, зависне од референтних својстава |
| Дубока копија | Јасна имплементација је потребна | Природно | Јасна имплементација за референтна својства |