Odpowiedzi:
Używasz NSNumber.
Ma metody init ... i number ..., które przyjmują wartości logiczne, podobnie jak liczby całkowite i tak dalej.
Z odwołania do klasy NSNumber :
// Creates and returns an NSNumber object containing a
// given value, treating it as a BOOL.
+ (NSNumber *)numberWithBool:(BOOL)value
i:
// Returns an NSNumber object initialized to contain a
// given value, treated as a BOOL.
- (id)initWithBool:(BOOL)value
i:
// Returns the receiver’s value as a BOOL.
- (BOOL)boolValue
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
@YES
jest taki sam jak[NSNumber numberWithBool:YES]
Jeśli deklarujesz go jako literał i używasz clang w wersji 3.1 lub nowszej, powinieneś użyć @NO / @YES, jeśli deklarujesz go jako literał. Na przykład
NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy];
foo[@"bar"] = @YES;
Więcej informacji na ten temat:
NSDictionary
, a nie NSMutableDictionary
. Więc przypisanie @YES
do foo[@"bar"]
nie jest możliwe, ponieważ @{ @"key": @NO }
nie jest zmienne.
Jak zauważył jcampbell1 , teraz możesz użyć dosłownej składni dla NSNumbers:
NSDictionary *data = @{
// when you always pass same value
@"someKey" : @YES
// if you want to pass some boolean variable
@"anotherKey" : @(someVariable)
};
Spróbuj tego:
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'");
}
Wynik będzie następujący:
Wartość logiczna jest PRAWDA dla „ Pratik ”
Boolean jest FAŁSZ dla „ Sachin ”
[NSNumber numberWithBool:NO]
i [NSNumber numberWithBool:YES]
.