我正在使用一种完全不同的技术,肯定有点不正统,因为我的代码正在处理巨大的数据集,我真的很讨厌必须对每个值进行 NSNull 测试。我所做的是NSNull的子类,所以在处理数据时,我可以测试它的数值是否为0,它的字符串长度是否为0等。
@implementation NSNull (JSON)
- (NSUInteger)length { return 0; }
- (NSInteger)integerValue { return 0; };
- (CGFloat)floatValue { return 0; };
- (NSString *)description { return @"0(null)"; } // so I know it was NSNull in log messages
- (NSArray *)componentsSeparatedByString:(NSString *)separator { return @[]; }
- (id)objectForKey:(id)key { return nil; }
- (BOOL)boolValue { return NO; }
@end
编辑:我在电子商务运输应用程序中使用了完全相同的代码。数十个不同的 API 返回数以千计的对象 - 必须查看每个项目以查看它[NSNull null]
是否是一场噩梦。我试图编写一个例程来修饰结果,它会递归地查看字典和数组并重建对象,但它太复杂了。
无论如何,我从来没有遇到过这个解决方案的问题。显然是YMMV。