如何为NSDictionary添加布尔值?


112

好吧,对于整数,我会使用NSNumber。但是,我猜是不是不是对象。Afaik我只能将对象添加到NSDictionary,对吗?

我找不到布尔的任何包装器类。有没有?

Answers:


156

您使用NSNumber。

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

NSNumber类参考

// 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

和:

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

大!我猜它内部存储布尔为0/1?
感谢

5
@伤害是正确的。例如: NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
So Over It

29
值得指出的是,现在存在NSNumbers的文字语法。 @YES[NSNumber numberWithBool:YES]
jcampbell1 2013年

51

自此以来的新语法 Apple LLVM Compiler 4.0

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

语法转换BOOLNSNumber,可以接受NSDictionary


16

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

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

有关更多信息:

http://clang.llvm.org/docs/ObjectiveCLiterals.html


1
得到一个编译器错误:用NSDictionary类型的表达式初始化NSMutableDictionary *的不兼容指针类型。如果改为将声明更改为NSDictionary,则会出现编译器错误:在NSDictionary类型的对象上找不到字典元素的预期方法*
Tony

1
文字只会创建一个NSDictionary,而不是一个NSMutableDictionary。因此,分配@YESfoo[@"bar"],因为是不可能的@{ @"key": @NO }不可变。
redhotvengeance 2014年

3

正如jcampbell1指出的那样,现在您可以对NSNumbers使用文字语法:

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

-2

试试这个:

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'");
}

输出将如下所示:

对于“ Pratik ”,布尔值为TRUE

Sachin ”的布尔值为FALSE


1
您也可以这样做[NSNumber numberWithBool:NO][NSNumber numberWithBool:YES]
Alex Zavatone '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.