用KVC压平一系列字典

时间:2017-01-24 15:07:56

标签: objective-c kvc

我正在尝试使用KVC压缩二维数组字典。

NSArray *toBeFlatten = @[@[@{@1:@1}],@[@{@2:@2}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
// flat:@[NSNull.null, NSNull.null];

为什么词典“转换”为NSNull?

1 个答案:

答案 0 :(得分:5)

这是因为valueForKeyPath:也将应用于词典。它是如何工作的?它在每个字典中查找,尝试使用"self"作为键,找不到这样的键,并返回NSNull来表示缺失值。

要了解我的意思,请考虑您的示例中的这种变体:

NSArray *toBeFlatten = @[@[@{@"self":@"hey"}],@[@{@"other":@"ho"}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];

结果是@[@"hey", NSNull.null] - 第一个字典中匹配键"hey"的值"self",以及第二个字典中没有匹配键的空值。

您可能意味着说的是valueForKeyPath:@"@unionOfArrays.@self"(注意旁观,使self成为运算符,而不是密钥。)