Objective C布尔数组
我需要在objective-c中使用一组布尔值。 我已经设置了它,但是编译器在下面的语句中引发一个警告:
[updated_users replaceObjectAtIndex:index withObject:YES];
这是,我敢肯定,因为是不是一个对象; 这是一个原始的。 无论如何,我需要做到这一点,并非常感谢如何实现它的build议。
谢谢。
是的,这正是它是什么:NS *容器只能存储客观的C对象,而不是原始types。
你应该能够完成你想要的东西,把它包装在一个NSNumber中:
[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
或者通过使用包含BOOL
@(YES)
在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]];
或根据您的需要使用Carrays:
BOOL array[100]; array[31] = YES;
像乔治说的那样,使用一个C数组。
BOOL myArray[10]; for (int i = 0; i < 10; i++){ myArray[i] = NO; } if (myArray[2]){ //do things; }
Martijn,“myArray”是你使用的名字,在georg的例子中是“array”。
从XCode 4.4开始,您可以使用Objective-C文字。
[updated_users replaceObjectAtIndex:index withObject:@YES];
其中@YES
相当于[NSNumber numberWithBool:YES]
如果你的集合很大,或者你希望它比objc对象更快,那么尝试CoreFoundation中的CFBitVector
/ CFMutableBitVector
types。 它是一个CF-Collectionstypes,它不附带NS对象,但如果需要,它可以快速包装在objc类中。