如何向NSDictionary添加布尔值?

时间:2009-05-24 14:41:21

标签: objective-c iphone cocoa-touch uikit

好吧,对于整数,我会使用NSNumber。但是,我想,YES和NO不是对象。据我所知。我只能将对象添加到NSDictionary,对吗?

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

5 个答案:

答案 0 :(得分:154)

您使用的是NSNumber。

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

来自NSNumber class reference

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

答案 1 :(得分:47)

Apple LLVM Compiler 4.0

以来的新语法
dictionary[@"key1"] = @(boolValue);
dictionary[@"key2"] = @YES;

语法将BOOL转换为NSNumberNSDictionary可接受。{/ p>

答案 2 :(得分:16)

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

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

有关详情:

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

答案 3 :(得分:2)

正如jcampbell1指出的,现在你可以使用NSNumbers的文字语法:

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

答案 4 :(得分:-2)

试试这个:

@items.group("created_at").count.map {|k,v| {k.strftime("%b %d, %Y") => v }}

输出如下:

对于' Pratik '

,布尔值为 TRUE 对于' Sachin '

布尔值为 FALSE