How can I add a boolean value to a NSDictionary?

后端 未结 5 1744
长情又很酷
长情又很酷 2021-01-30 05:46

Well, for integers I would use NSNumber. But YES and NO aren\'t objects, I guess. A.f.a.i.k. I can only add objects to an NSDictionary, right?

相关标签:
5条回答
  • 2021-01-30 06:31

    You use NSNumber.

    It has init... and number... methods that take booleans, just as it does integers and so on.

    From the NSNumber class reference:

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

    and:

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

    and:

    // Returns the receiver’s value as a BOOL.
    - (BOOL)boolValue
    
    0 讨论(0)
  • 2021-01-30 06:35

    As jcampbell1 pointed out, now you can use literal syntax for NSNumbers:

    NSDictionary *data = @{
                          // when you always pass same value
                          @"someKey" : @YES
                          // if you want to pass some boolean variable
                          @"anotherKey" : @(someVariable)
                          };
    
    0 讨论(0)
  • 2021-01-30 06:40

    Try this:

    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'");
    }
    

    The output will be as following:

    Boolean is TRUE for 'Pratik'

    Boolean is FALSE for 'Sachin'

    0 讨论(0)
  • 2021-01-30 06:42

    The new syntax since Apple LLVM Compiler 4.0

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

    The syntax converts BOOL to NSNumber, which is acceptable to NSDictionary.

    0 讨论(0)
  • 2021-01-30 06:47

    If you are declaring it as a literal and you are using clang v3.1 or above, you should use @NO / @YES if you are declaring it as a literal. E.g.

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

    For more info on that:

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

    0 讨论(0)
提交回复
热议问题