Himan Dhawan
Himan Dhawan

Reputation: 924

Update dictionary values in nested dictionary

The nested dictionary that I am using is build like this

    var fDict : [String : Any] = [:]
    var errors : [String : Any] = [:]
    var error : [String : Any] = [:]
    let base : [String : Any] = ["key": "123"]
    error["error"] = base
    errors["errors"] = error
    fDict["profile-response"] = errors

The dictionary is looking like :

{
 “profile-response“ : {
  “errors” : {
      “error” : {
        “key“ = “123”
      }
  }
 }
}

I have written code to update the value of key to "abc" Code :

func replaceErrorWithCustomError( data : inout [String: Any]) {
    for (key,value) in data {
            if key == "key" {
                data.updateValue("abc", forKey: key)
                break
            } else if var value = value as? [String: Any] {
                replaceErrorWithCustomError(data: &value)
            }
            
        }
    }

The result before update and after update remains same. Please suggest how to make changes in the current dictionary without taking another dictionary.

Upvotes: 0

Views: 80

Answers (1)

Tarun Tyagi
Tarun Tyagi

Reputation: 10102

You can try this -

func replaceErrorWithCustomError(data: inout [String: Any]) {
    func updateError(dict: inout [String: Any]) -> [String: Any] {
        for (key, value) in dict {
            if key == "key" {
                dict.updateValue("abc", forKey: key)
                break
            } else if var value = value as? [String: Any] {
                // This is the key change
                // Result must be updated back into parent
                dict[key] = updateError(dict: &value)
            }
        }
        return dict
    }
    updateError(dict: &data)
}

Upvotes: 1

Related Questions