web-dev-qa-db-fra.com

Comment puis-je ajouter une valeur booléenne à un NSDictionary?

Eh bien, pour les entiers, j’utiliserais NSNumber. Mais OUI et NON ne sont pas des objets, je suppose. Autant que je sache. Je ne peux ajouter que des objets à un NSDictionary, n'est-ce pas?

Je n'ai pas trouvé de classe d'emballage pour les booléens. Y a-t-il?

112
Thanks

Vous utilisez NSNumber.

Il a init ... et nombre ... méthodes qui prennent des booléens, tout comme des entiers, etc.

Depuis le référence de la classe NSNumber :

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

et:

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

et:

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

La nouvelle syntaxe depuis Apple LLVM Compiler 4.0

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

La syntaxe convertit BOOL en NSNumber, ce qui est acceptable pour NSDictionary.

49
Brian

Si vous le déclarez en tant que littéral et que vous utilisez Clang v3.1 ou une version ultérieure, vous devez utiliser @NO/@YES si vous le déclarez en tant que littéral. Par exemple.

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

Pour plus d'informations à ce sujet:

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

16
sabalaba

Comme jcampbell1 a souligné, vous pouvez maintenant utiliser la syntaxe littérale pour NSNumbers:

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