Связь элементов в двух массива (reference)
Есть массив results = [1, 3, 5, 1, 8, 5, 0, 6], берём, например, массив первых двух значений results2 = [results[0], results[1]]. Как сделать так, чтобы изменяя массив results2, изменялось значение в массиве results
Т.е. результат должен быть таким:
var results = [1, 3, 5, 1, 8, 5, 0, 6]
var results2 = [results[0], results[1]]
results2[1] - 1
Вывод (см. на 2-й элемент массива):
results = [1, 2, 5, 1, 8, 5, 0, 6]
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Если вы храните в массивах объекты типа struct (как в случае с Int), то нужно для них сделать обертку в виде класса для обращения по ссылкам, а не копирования
Пример
class IntWrapper : CustomStringConvertible {
private var value = 0
var description: String {
String(value)
}
init(_ value: Int) {
self.value = value
}
func setValue(_ value: Int) {
self.value = value
}
}
var results = [IntWrapper(1), IntWrapper(3)]
var results2 = [results[0], results[1]]
results2[1].setValue(999)
print(results, results2)
Вывод:
[1, 999] [1, 999]