NSArray 和布尔值

Posted

技术标签:

【中文标题】NSArray 和布尔值【英文标题】:NSArray and bool values 【发布时间】:2011-04-15 17:38:23 【问题描述】:

NSArray 可以保存一个布尔值数组吗?

以下代码运行

BOOL b = NO;
NSMutableArray *array = [[NSMutableArray alloc] init];

[array addObject:[NSNumber numberWithBool:b]];

NSLog(@"value is %d", [array objectAtIndex:0] );

但是,我没有得到预期的 NO 值 0。相反,这就是我得到的

值为 37736096

【问题讨论】:

【参考方案1】:

是的,只需将布尔值包装在 NSNumber 中:

BOOL b = YES;

[array addObject:[NSNumber numberWithBool:b]];

如果要检索布尔值,请使用:

BOOL b = [[array objectAtIndex:i] boolValue]; 
// only if you know for sure it contains a boolean

【讨论】:

你能解释一下为什么 bool NO 会变成一个大数字吗?那是随机值吗?谢谢。 那是 NSNumber 对象的地址,而不是它的内容。这是因为你忘记调用 -boolValue【参考方案2】:

要完成 Philippe 的回答,您应该使用 XCode 4.4 中引入的随 Apple LLVM 编译器版本 4.0 发布的文字字符串。

您的代码将如下所示:

NSMutableArray *array = [[NSMutableArray alloc] init];

array[0] = @YES;

//Value is 1
NSLog(@"Value is %d:", [array[0]  boolValue]);

【讨论】:

...输出应该是什么? %d 会将输出格式化为数字,因此您将看到“值为 1”

以上是关于NSArray 和布尔值的主要内容,如果未能解决你的问题,请参考以下文章

为啥是布尔值和布尔值

c#中布尔值和布尔值的区别? [复制]

(14)awk布尔值比较和逻辑运算

布尔值数据类型

js中数字是非布尔值吗

布尔值是不是与 WCF 合同中的布尔值相同 [关闭]