Я пытаюсь вставить некоторые значения в [String: Any]
для дальнейшего использования.
Минималистичный пример моего кода:
var info = ["Person" : [
"Age" : 20,
"Name" : "Ratul Sharker"
]]
print(info)
if var person = info["Person"] as? [String:Any] {
person["height"] = 5.5
print("~~> Height injected")
//
// however if i reassign the
// person into the info, then
// the info appear into the print
// info["Person"] = person
}
print(info)
Код также доступен здесь
Вывод этого кода дает мне
["Person": ["Age": 20, "Name": "Ratul Sharker"]]
~~> Height injected
["Person": ["Age": 20, "Name": "Ratul Sharker"]]
Очевидно, что height
, который я вводю, не имеет никакого эффекта, потому что, когда происходит необязательное развертывание, создается еще одна копия словаря person
. Таким образом, изменение остается локальным. Назначение местного человека в словарь делает свое дело.
Здесь я хочу не копировать значение при необязательном развертывании, используя if let
. Есть ли способ, которым я могу сказать if let
конструкцию, чтобы он брал ссылку на значение вместо значения. Я много искал об этом сценарии, все, что я получал, передавая ссылку на функцию, используя &
и inout
.
Заранее спасибо.