Назначение и поведение копирования для массивов в Swift

#arrays #swift

#массивы #swift

Вопрос:

Если я создаю массивы из другого массива, например :

 var ArrayOne = [1,2,3,4]
var ArrayTwo = ArrayOne
var ArrayThree = ArrayTwo
  

Теперь в соответствии с назначением и поведением копирования массива, если я изменю какое-либо значение из arrayTwo, это будет отражено в arrayOne и ArrayThree. но если я добавлю / удалю в arrayTwo, это не отразится в arrayOne / ArrayThree, потому что экземпляр массива изменяется.

 ArrayTwo[0] = 100
println(ArrayTwo[0])
// 100
println(ArrayThree[0])
// 100
  

и

 ArrayTwo.append(5)
ArrayTwo[0] = 999
println(ArrayTwo[0])
// 999
println(ArrayThree[0])
// 100
  

Есть ли какой-либо способ изменить весь массив одновременно без создания новой копии / экземпляра массива при каждой модификации (добавление / удаление).

Комментарии:

1. Просто используйте дополнительную косвенность.

Ответ №1:

Массивы, словари и строки являются структурами и передаются по значению в Swift. Чтобы добиться такого поведения, вы могли бы попробовать использовать NSArray или создать свой собственный класс Swift.