Objective C 布尔数组
Posted
技术标签:
【中文标题】Objective C 布尔数组【英文标题】:Objective C Boolean Array 【发布时间】:2010-10-12 07:35:57 【问题描述】:我需要在objective-c 中使用一个布尔数组。我已经基本设置好了,但是编译器会在以下语句中抛出警告:
[updated_users replaceObjectAtIndex:index withObject:YES];
这是,我敢肯定,因为 YES 根本就不是一个对象;这是一个原始的。无论如何,我需要这样做,并且非常感谢有关如何完成它的建议。
谢谢。
【问题讨论】:
当询问警告时,请发布有问题的警告:) 【参考方案1】:没错,就是这样: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];
【讨论】:
【参考方案2】:假设您的数组包含有效对象(并且不是 c 样式数组):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
【讨论】:
我很想知道为什么尼克斯的回答比这个得到了更多的支持,因为这看起来更优雅。谁能解释一下区别?【参考方案3】:您可以存储NSNumbers
:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
或使用 C 数组,具体取决于您的需要:
BOOL array[100];
array[31] = YES;
【讨论】:
【参考方案4】:就像 Georg 所说,使用 C 数组。
BOOL myArray[10];
for (int i = 0; i < 10; i++)
myArray[i] = NO;
if (myArray[2])
//do things;
Martijn,“myArray”是您使用的名称,在georg 的示例中为“array”。
【讨论】:
【参考方案5】:从 XCode 4.4 开始,您可以使用 Objective-C 文字。
[updated_users replaceObjectAtIndex:index withObject:@YES];
其中@YES
等同于[NSNumber numberWithBool:YES]
【讨论】:
【参考方案6】:如果您的集合很大或者您希望它比 objc 对象更快,请尝试 CoreFoundation 中的 CFBitVector
/CFMutableBitVector
类型。它是 CF-Collections 类型之一,不与 NS 对应,但如果需要,它可以快速包装在 objc 类中。
【讨论】:
以上是关于Objective C 布尔数组的主要内容,如果未能解决你的问题,请参考以下文章