如何向 NSDictionary 添加布尔值?

对于整数,我会用 NSNumber。但是我想“是”和“否”并不是对象。A.f.a.i.k. 我只能向 NSDictionary添加对象,对吗?

我找不到布尔型的包装类,有吗?

77927 次浏览

你用 NSNumber。

它有 init... 和 number... 方法,它们使用布尔值,就像它使用整数一样。

来自 类引用:

// Creates and returns an NSNumber object containing a
// given value, treating it as a BOOL.
+ (NSNumber *)numberWithBool:(BOOL)value

以及:

// Returns an NSNumber object initialized to contain a
// given value, treated as a BOOL.
- (id)initWithBool:(BOOL)value

and:

// Returns the receiver’s value as a BOOL.
- (BOOL)boolValue

如果将其声明为文字,并且使用的是 clang v3.1或更高版本,则如果将其声明为文字,则应使用@NO/@YES。例如。

NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy];
foo[@"bar"] = @YES;

关于这方面的更多信息:

Http://clang.llvm.org/docs/objectivecliterals.html

The new syntax since Apple LLVM Compiler 4.0

dictionary[@"key1"] = @(boolValue);
dictionary[@"key2"] = @YES;

该语法将 BOOL转换为 NSNumber,这对于 NSDictionary是可接受的。

正如 JCampbell 1指出的,现在可以对 NSNumbers 使用文本语法:

NSDictionary *data = @{
// when you always pass same value
@"someKey" : @YES
// if you want to pass some boolean variable
@"anotherKey" : @(someVariable)
};

试试这个:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:[NSNumber numberWithBool:TRUE]  forKey:@"Pratik"];
[dic setObject:[NSNumber numberWithBool:FALSE] forKey:@"Sachin"];


if ([dic[@"Pratik"] boolValue])
{
NSLog(@"Boolean is TRUE for 'Pratik'");
}
else
{
NSLog(@"Boolean is FALSE for 'Pratik'");
}


if ([dic[@"Sachin"] boolValue])
{
NSLog(@"Boolean is TRUE for 'Sachin'");
}
else
{
NSLog(@"Boolean is FALSE for 'Sachin'");
}

产出如下:

布尔值是 没错代表 普拉提克

布尔值是 假的代表 Sachin