我需要在Objective-C中使用布尔值数组。我已经基本设置好了,但编译器在以下语句处抛出警告:
[updated_users replaceObjectAtIndex:index withObject:YES];
我相信,这是因为YES只是一个基本类型,而不是对象。无论如何,我需要做到这一点,并且非常感谢关于如何实现它的建议。
谢谢。
我需要在Objective-C中使用布尔值数组。我已经基本设置好了,但编译器在以下语句处抛出警告:
[updated_users replaceObjectAtIndex:index withObject:YES];
我相信,这是因为YES只是一个基本类型,而不是对象。无论如何,我需要做到这一点,并且非常感谢关于如何实现它的建议。
谢谢。
没错,这正是问题所在: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];
假设您的数组包含有效对象(并且不是C风格的数组):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
你可以存储 NSNumbers
:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
或者根据您的需求使用C数组:
BOOL array[100];
array[31] = YES;
像Georg所说的那样,使用C数组。
BOOL myArray[10];
for (int i = 0; i < 10; i++){
myArray[i] = NO;
}
if (myArray[2]){
//do things;
}
马蒂因,"myArray" 是你使用的名称,而在乔治的例子中是 "array"。
从XCode 4.4开始,您可以使用Objective-C字面量。
[updated_users replaceObjectAtIndex:index withObject:@YES];
其中@YES
相当于[NSNumber numberWithBool:YES]
CFBitVector
/CFMutableBitVector
类型。这是CF-Collections类型之一,它没有NS对应的类型,但如果需要的话,可以快速地封装成一个objc类。