У меня есть вложенный словарь и массив, содержащий фрагмент пути. Мне нужно обновить значение в этом месте.
Возможно, я ищу рекурсивную функцию вместо расширений для Dictionary
типов и тому подобное.
Я не могу сделать это рекурсивно, потому что я делаю копию параметра inout
.
var dict: [String: Any] = ["channel": ["item": ["title": 1111]]]
var pathFrag = ["channel", "item", "title"]
var val = 123
func addAt(pathFrag: inout [String], val: Int, data: inout [String: Any]) {
if let first = pathFrag.first {
if let item = data[first] {
print(item)
pathFrag.remove(at: 0)
if !pathFrag.isEmpty {
var d: [String: Any] = data[first] as! [String: Any]
print("e: \(d)")
return addAt(pathFrag: &pathFrag, string: string, data: &d)
} else {
data[first] = val
print("else: \(data)") // ["title": 123]
}
}
}
}
addAt(pathFrag: &pathFrag, val: val, data: &dict)
print(dict)
Как обновить значение title
до 123
?