ios - 生成 NSDictionary 的深拷贝以修改嵌套值

标签 ios swift nsdictionary

想象一下您有一个包含不同类型的键和值的 NSDictionary(不是 Dictionary)的场景,例如 NSNumber和另一个 NSDictionary。并且可能有多个嵌套的 NSDictionary。您现在需要查看此结构中的每个字典(无论嵌套多远)以查找特定键,并在找到它的任何地方将其值替换为不同的值。

这如何在 Swift 中实现 - 特别是 Swift 2?

我认为可以创建此结构的深度可变副本 (NSMutableDictionary),然后可能使用递归来处理和修改每个字典(如有必要)。完成后,将原始结构替换为修改后的可变结构。如果这是一种好方法,那么如何执行此结构的深层可变副本才能使用它呢?或者还可以如何实现?

例如,这可能是字典:

{
    NUMFRIENDS = 3;
    GREETING = 
    {
        HELLO = WORLD;
        WHATSUP = DUDE;
        ...
    }
    HELLO = WORLD;
    ...
}

并且您希望找到所有 HELLO 键并将它们的值替换为 UNIVERSE

最佳答案

在 Objective-C 中我一直在使用这个技巧:

[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self]]

这会使用 NSCoding 协议(protocol)自动对所有对象进行深度复制。

所以在 Swift 中同样的技巧应该起作用:

NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self))

关于ios - 生成 NSDictionary 的深拷贝以修改嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870557/

相关文章:

ios - 如何在模拟器上检测iPhone 6(6 Plus)

ios - 如何将 UITableViewCell 中 textField 的值获取到 textFieldDelegate 方法 shouldChangeCharactersIn 中?

ios - 我可以在 Swift 中强制协议(protocol)符合吗?

macos - addSubview(...) 导致额外的窗口

iphone - 如何从 NSDictionary 获取数据到 NSArray

ios - 如何在 Objective-C/iOS 中的客户端上创建虚拟 JSON 数据?

iphone - iOS - 有清理 HTML 代码的好方法吗?

ios - Swift iOS 中动态链接 Web URL 查询项为空

ios - 如何确定多个(n)日期时间范围何时相互重叠

iphone - 在 Objective C 中创建一个 JSON