Swift recursive dictionary deep merge and clone
Swift
import Foundation
func deepClone(_ value: Any) throws -> Any {
let data = try JSONSerialization.data(withJSONObject: value)
return try JSONSerialization.jsonObject(with: data)
}
func deepMerge(_ base: [String: Any], _ patch: [String: Any]) -> [String: Any] {
var result = base
for (key, value) in patch {
if let left = result[key] as? [String: Any],
let right = value as? [String: Any] {
result[key] = deepMerge(left, right)
} else {
result[key] = value
}
}
return result
}