与 Javascript-Object 类似,我需要将布尔值和 nil 值存储在 Objective-C NSDictionary 中。(当我尝试编写通用 JSON 解析器时确实出现了这个问题)(是的,我知道那里有一些很好的即用型解析器,但我想尝试编写自己的。)
这是我想做的一个例子:
NSString* str = @"a string";
NSNumber* num = @123.456;
NSArray* arr = @[@"abc",@99];
boolean boo = true;
id obj = nil;
NSDictionary* dict = @{
@"key1" : str,
@"key2" : num,
@"key3" : arr,
@"key4" : boo, //will not work since boo is not an object
@"key5" : obj //will not work since obj is nil
};
//later in the same piece of code:
dict = @{
@"key1" : str,
@"key2" : num,
@"key3" : arr,
@"key4" : @1, //Here we have the NSNumber 1 assigned to key4
//(which is not the boolean value true)
@"key5" : @"" //an empty NSString-Object (which is not nil)
};
boolean
一个解决方案可能是,我这样做:
...
@"key4" : [NSNumber numberWithBool:boo];
...
但如果 boo 为真,结果将与
...
@"key4" : @1;
...
如果它是假的,那将是相同的
...
@"key4" : @0;
...
但我需要知道原始值是布尔值还是数字。
nil vs. placeholder-object
我可以使用空字符串 (@"")、某个数字 (-1) 或其他内容之类的占位符,而不是将 nil 作为值分配给字典。但后来,我没有机会知道,我是否确实存储了占位符,因为我想存储 nil,或者我是否确实存储了一个偶然与我的占位符相同的有效值。