Связь элементов в двух массива (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]
→ Ссылка