我正在尝试使用KVC压缩二维数组字典。
NSArray *toBeFlatten = @[@[@{@1:@1}],@[@{@2:@2}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
// flat:@[NSNull.null, NSNull.null];
为什么词典“转换”为NSNull?
答案 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
成为运算符,而不是密钥。)