Objective C布尔数组

All*_*lyn 38 c arrays primitive boolean objective-c

我需要在objective-c中使用一系列布尔值.我已经完成了它的设置,但编译器会在以下语句中发出警告:

[updated_users replaceObjectAtIndex:index withObject:YES];
Run Code Online (Sandbox Code Playgroud)

这是,我敢肯定,因为YES根本不是一个对象; 这是一个原始的.无论如何,我需要这样做,并非常感谢如何实现它的建议.

谢谢.

Nic*_*dge 72

是的,这正是它的原因:NS*容器只能存储Objective-C对象,而不是基本类型.

您应该能够通过将其包装在NSNumber中来完成您想要的任务:

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

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

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

然后你可以拿出boolValue:

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


And*_*ant 14

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

#define kNSTrue         ((id) kCFBooleanTrue)
#define kNSFalse        ((id) kCFBooleanFalse)
#define NSBool(x)       ((x) ? kNSTrue : kNSFalse)

[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
Run Code Online (Sandbox Code Playgroud)

  • 我很想知道为什么Nicks的答案得到了比这个更多的支持,因为这看起来更优雅.有人可以解释这个区别吗? (2认同)

Geo*_*lly 11

你可以存储NSNumbers:

[updated_users replaceObjectAtIndex:index
                         withObject:[NSNumber numberWithBool:YES]];
Run Code Online (Sandbox Code Playgroud)

或根据您的需要使用C阵列:

BOOL array[100];
array[31] = YES;
Run Code Online (Sandbox Code Playgroud)


Nic*_*cki 8

像Georg说的那样,使用C阵列.

BOOL myArray[10];

for (int i = 0; i < 10; i++){
  myArray[i] = NO;
}

if (myArray[2]){
   //do things;
}
Run Code Online (Sandbox Code Playgroud)

Martijn,"myArray"是你使用的名字,在georg的例子中是"array".


Iva*_*nov 5

从 XCode 4.4 开始,您可以使用 Objective-C 文字。

[updated_users replaceObjectAtIndex:index withObject:@YES];

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