web-dev-qa-db-ja.com

NSDictionaryにブール値を追加するにはどうすればよいですか?

さて、整数にはNSNumberを使用します。しかし、YESとNOはオブジェクトではありません。私の知る限り。 NSDictionaryにのみオブジェクトを追加できますか?

ブール値のラッパークラスが見つかりませんでした。何かありますか?

112
Thanks

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
156
harms

Apple LLVM Compiler 4.0以降の新しい構文

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

構文はBOOLNSNumberに変換しますが、これはNSDictionaryに受け入れられます。

49
Brian

リテラルとして宣言し、clang v3.1以降を使用している場合、リテラルとして宣言する場合は@NO/@YESを使用する必要があります。例えば。

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

詳細については:

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

16
sabalaba

jcampbell1 が指摘したように、NSNumbersにリテラル構文を使用できるようになりました。

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