У меня есть следующая проблема.Как предотвратить изменение копии словаря
У меня есть функция под названием , которая принимает следующий словарь в качестве аргумента [String : MyClass]
, где MyClass является пользовательским классом, который я создал (это подкласс NSObject
). MyClass имеет свойство firstProperty.
Функция A выглядит так:
func A (someDictionary : [String : MyClass]) {
var someDictionaryCopy = someDictionary
someDictionaryCopy["Key"].updateValue()
}
Ok, так что первая линия в теле функции А копирует someDictionary, который передается функции А. Но я ДОН» T хочет изменить или изменить оригинальный someDictionary.
вторая строка: Я беру какое-то существующее значение в словаре и запускаю метод на экземпляре MyClass, который модифицирует одно из его свойств.
Дело в том, что если я запустил код выше, также будет изменен исходный словарь, который передан функции. Почему это так? Как я могу передать словарь функции, чтобы он не мутировался?
Для вашего удобства, вот пример реализации MyClass:
class MyClass : NSObject {
var someProperty : Double = 0.0
func updateValue() {
someProperty += 10.0
}
}
Свифт-словари - это тип значения - оригинал * не * изменяется при обновлении копии. Это противоположность NSDictionary, который является * ссылочным * типом. Однако в вашем словаре Swift у вас есть * класс *: они являются ссылочным и будут обновляться из копии. – Moritz
Итак, как мне скопировать словарь, чтобы значения внутри него не были изменены? – phbelov
Вы не должны работать с классами, если вам не нужна эталонная работа, вместо этого используйте структуры. Но если вы используете классы, то обнимайте систему отсчета. Это мое предложение. :) – Moritz