假设您有一个NSDictionary(不是Dictionary)包含不同类型的键和值,例如一个NSNumber和另一个NSDictionary。可能有多个嵌套的NSDictionarys。您现在需要查看此结构中的每个字典(无论嵌套多远)以查找特定的键,并且在找到该键的所有位置,都将其值替换为不同的值。
如何在Swift中实现这一点-特别是Swift 2?
我认为可以创建这个结构的深层可变副本(NSMutableDictionary),然后可能使用递归,以便在必要时处理和修改每个字典。完成后,用修改后的可变结构替换原始结构。如果这是一个好方法,那么如何执行此结构的深层可变副本才能使用它?不然怎么能做到呢?
例如,这可能是字典:

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

您希望找到所有HELLO键并将其值替换为UNIVERSE

最佳答案

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

[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self]]

使用NSCoding协议自动生成所有对象的深度副本。
所以在斯威夫特,同样的伎俩也应该奏效:
NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self))

10-07 15:15