2

ネストされた辞書と、パス フラグメントを含む配列があります。その場所の値を更新する必要があります。

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)

titletoの値を更新する方法は123?

4

2 に答える 2