生成NSDictionary的深层副本以修改嵌套值

时间:2015-08-07 05:47:05

标签: ios swift nsdictionary

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

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

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

例如,这可能是字典:

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

您希望找到所有HELLO个密钥,并将其值替换为UNIVERSE

1 个答案:

答案 0 :(得分:0)

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

[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self]]

使用NSCoding协议自动生成所有对象的深层副本。

所以在Swift中,同样的技巧应该有效:

NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self))