Objective C Boolean Array

前端 未结 6 978
北恋
北恋 2020-12-08 18:54

I need to utilize an array of booleans in objective-c. I\'ve got it mostly set up, but the compiler throws a warning at the following statement:

[updated_use         


        
相关标签:
6条回答
  • 2020-12-08 19:21

    Assuming your array contains valid objects (and is not a c-style array):

    #define kNSTrue         ((id) kCFBooleanTrue)
    #define kNSFalse        ((id) kCFBooleanFalse)
    #define NSBool(x)       ((x) ? kNSTrue : kNSFalse)
    
    [updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
    
    0 讨论(0)
  • 2020-12-08 19:25

    You can either store NSNumbers:

    [updated_users replaceObjectAtIndex:index
                             withObject:[NSNumber numberWithBool:YES]];
    

    or use a C-array, depending on your needs:

    BOOL array[100];
    array[31] = YES;
    
    0 讨论(0)
  • 2020-12-08 19:28

    Like Georg said, use a C-array.

    BOOL myArray[10];
    
    for (int i = 0; i < 10; i++){
      myArray[i] = NO;
    }
    
    if (myArray[2]){
       //do things;
    }
    

    Martijn, "myArray" is the name you use, "array" in georg's example.

    0 讨论(0)
  • 2020-12-08 19:34

    From XCode 4.4 you can use Objective-C literals.

    [updated_users replaceObjectAtIndex:index withObject:@YES];

    Where @YES is equivalent of [NSNumber numberWithBool:YES]

    0 讨论(0)
  • 2020-12-08 19:35

    If your collection is large or you want it to be faster than objc objects, try the CFBitVector/CFMutableBitVector types found in CoreFoundation. It's one of the CF-Collections types which does not ship with a NS counterpart, but it can be wrapped in an objc class quickly, if desired.

    0 讨论(0)
  • 2020-12-08 19:44

    Yep, that's exactly what it is: the NS* containers can only store objective-C objects, not primitive types.

    You should be able to accomplish what you want by wrapping it up in an NSNumber:

    [updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]

    or by using @(YES) which wraps a BOOL in an NSNumber

    [updated_users replaceObjectAtIndex:index withObject:@(YES)]]

    You can then pull out the boolValue:

    BOOL mine = [[updated_users objectAtIndex:index] boolValue];

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