objective-c - objective - que es uikit ios
¿Cómo puedo agregar un valor booleano a un NSDictionary? (5)
Como señaló jcampbell1 , ahora puedes usar la sintaxis literal para NSNumbers:
NSDictionary *data = @{
// when you always pass same value
@"someKey" : @YES
// if you want to pass some boolean variable
@"anotherKey" : @(someVariable)
};
Bueno, para enteros usaría NSNumber
. Pero sí y no son objetos, supongo. Afaik solo puedo agregar objetos a un NSDictionary
, ¿verdad?
No pude encontrar ninguna clase contenedora para booleanos. ¿Hay alguna?
La nueva sintaxis desde Apple LLVM Compiler 4.0
dictionary[@"key1"] = @(boolValue);
dictionary[@"key2"] = @YES;
La sintaxis convierte BOOL
en NSNumber
, que es aceptable para NSDictionary
.
Prueba esto:
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''");
}
El resultado será el siguiente:
Boolean es VERDADERO para '' Pratik ''
Boolean es FALSO para '' Sachin ''
Si lo declaras literal y estás utilizando clang v3.1 o superior, debes usar @NO / @YES si lo declaras literal. P.ej
NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy];
foo[@"bar"] = @YES;
Para más información sobre eso:
Usas NSNumber.
Tiene init ... y number ... métodos que toman booleanos, como lo hace enteros, etc.
De la referencia de clase NSNumber :
// Creates and returns an NSNumber object containing a
// given value, treating it as a BOOL.
+ (NSNumber *)numberWithBool:(BOOL)value
y:
// Returns an NSNumber object initialized to contain a
// given value, treated as a BOOL.
- (id)initWithBool:(BOOL)value
y:
// Returns the receiver’s value as a BOOL.
- (BOOL)boolValue