代码之家  ›  专栏  ›  技术社区  ›  Allyn

目标C布尔数组

  •  38
  • Allyn  · 技术社区  · 15 年前

    我需要在objective-c中使用布尔数组。我已经设置了它,但是编译器在下面的语句中会发出警告:

    [updated_users replaceObjectAtIndex:index withObject:YES];
    

    我敢肯定,这是因为“是”不是一个物体,而是一个原始的物体。不管怎样,我需要这样做,并且非常感谢关于如何完成它的建议。

    谢谢。

    6 回复  |  直到 9 年前
        1
  •  70
  •   Kevin Zpkno    9 年前

    是的,正是这样:ns*容器只能存储objective-c对象,不能存储基元类型。

    您应该能够通过将它包装成一个nsnumber来完成您想要的工作:

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

    或通过使用 @(YES) 包裹一个 BOOL 在一个 NSNumber

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

    然后您可以提取布尔值:

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

        2
  •  14
  •   Andrew Grant    15 年前

    假设数组包含有效对象(并且不是C样式数组):

    #define kNSTrue         ((id) kCFBooleanTrue)
    #define kNSFalse        ((id) kCFBooleanFalse)
    #define NSBool(x)       ((x) ? kNSTrue : kNSFalse)
    
    [updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
    
        3
  •  11
  •   Georg Schölly Crazy Developer    15 年前

    你可以去任何一家商店 NSNumbers :

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

    或者根据需要使用C阵列:

    BOOL array[100];
    array[31] = YES;
    
        4
  •  8
  •   Nicki    14 年前

    就像乔治说的,使用C数组。

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

    martijn,“myarray”是您在Georg示例中使用的名称,“array”。

        5
  •  4
  •   Ivan Marinov    11 年前

    在Xcode4.4中,可以使用Objective-C文本。

    [updated_users replaceObjectAtIndex:index withObject:@YES];

    在哪里? @YES 相当于 [NSNumber numberWithBool:YES]

        6
  •  1
  •   justin    12 年前

    如果集合很大,或者希望它比objc对象更快,请尝试 CFBitVector / CFMutableBitVector 在CoreFoundation中找到的类型。它是CF集合类型之一 与一个NS对应物一起装运,但是如果需要,它可以快速包装在一个objc类中。