我应该为iOS布尔状态使用什么值?

时间:2013-01-03 12:03:08

标签: ios boolean

似乎在iOS中我有许多似乎适合布尔值的选项:

YES
NO
TRUE
FALSE
true
false

我应该使用哪些?在这种特殊情况下,我隐藏了一个标签,所以我应该将hidden属性设置为YESTRUE还是true

5 个答案:

答案 0 :(得分:13)

简短回答:您应该更喜欢YESNO来设置BOOL类型的基础属性。

对于长期答案,让我们首先看看这些常量定义在哪里:

  • truefalse来自stdbool.h;它们是#define - d为10
  • TRUEFALSE来自CFBase.h;它们是#define - d为10
  • YESNO来自NSObjCRuntime.h。这是signed char typedef - BOOL编辑的地方,其中两个值为#define - d为((BOOL)1)((BOOL)0)或{{ 1}} / __objc_yes如果支持__objc_no

基础类始终使用objc_bool({1}} BOOL来表示其布尔属性。由于前两对转换为typedef常量,因此使用它们可能会产生警告,但无论如何它都可能正常工作。但是,signed charint常量是以最兼容的方式为编译器定义的,无论其版本如何。因此,我建议您在整个代码中始终使用YESNO

答案 1 :(得分:6)

实际上YESTRUEtrue之间没有区别,这些都代表 1 所代表的真实状态。

NOfalseFALSE表示由 0 表示的错误状态。

您也可以使用:

BOOL aBool = 1;

相当于BOOL aBool = true;BOOL aBool = TRUE;以及BOOL aBool = YES;

可是:

BOOL bBool = 7;
if (bBool)
{
    NSLog(@"bBool is YES!\n");
}
if (bBool != YES) {
    NSLog("bBool is not YES!\n");
}

输出如:

b is YES!
b is not YES!

这是因为当BOOL类型的值为非零值时,与YES的直接比较将失败。

这对你来说是个不错的article

答案 2 :(得分:2)

我认为所有这些都没关系。但就个人而言,我想使用YES / NO

我找到了一个名为Objective-C Runtime Reference的文档:

  

布尔值   这些宏定义了方便的常量来表示布尔值。

     

#define YES(BOOL)1
  #define NO(BOOL)0

     

常量

     

YES
  将YES定义为1.
  适用于iOS 2.0及更高版本   在NSObjCRuntime.h中声明。

     

NO
  将NO定义为0.
  适用于iOS 2.0及更高版本   在NSObjCRuntime.h中声明。

     

声明在   objc.h

答案 3 :(得分:0)

我分享你对此的看法,虽然它们目前都定义相同,但是当你发现TRUE时,移植代码会很痛苦!= true。 (正是为什么我们永远不应该测试X == 1为TRUE,因为有些语言使用-1而有些语言使用1)

我认为这可能是个人偏好,主要是关于未来的港口。

我遵循TRUE和FALSE选项,以便更容易移植到C / C ++。

如果您经常将代码转换为Java,那么您可能会发现true和false更好,因此搜索/替换次数较少,但我发现与Cocoa的一致性更容易。

答案 4 :(得分:0)

使用YES和NO相同,分别使用TRUE和FALSE或1和0。

并使用NSLog查看结果,如下例:

BOOL result;
result = YES;
NSLog(@"my boolean result is %@",result ? @"Yes" : @"No");