【发布时间】:2013-01-25 20:24:01
【问题描述】:
我读过Mike Ash's Objective-C pitfalls page,现在我对将id 类型的变量隐式转换为BOOL 感到偏执。
假设我有一个低位清零的“危险”指针,因此将其转换为BOOL 会产生NO,即使它指向一个有效对象。让我们称之为“危险”指针foo。
简单的 if 语句如何工作?
if 语句在评估条件时是否将foo 转换为BOOL?还是转换为纯布尔值?
if( foo )
{
[myArray addObject:foo];
}
在三元表达式中的工作方式是否相同?
// Does this break when foo is 'dangerous'?
self.titleLabel.hidden = foo ? YES : NO ;
如果我这样做,三元组是否会中断:
// I'm pretty sure it breaks now
self.titleLabel.hidden = ((BOOL)foo) ? YES : NO ;
我觉得我缺少一些关于 C 中逻辑运算的基本知识,以及它们与BOOL 的关系。请帮我解惑。
【问题讨论】:
-
我很确定
if ( foo )等同于if ( foo != 0 ),它不会将foo转换为布尔值... cf。 stackoverflow.com/a/6177766/210171 -
我相信第二个选项也不错,因为同样是
(foo != 0) ? YES : NO。
标签: objective-c boolean type-conversion