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

看来,在iOS中我有一些选项,似乎适合布尔值:

YES NO TRUE FALSE true false 

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

简短的回答:您应该首选YESNO来设置BOOLtypes的基础属性。

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

  • truefalse来自stdbool.h ; 他们#define -d为10
  • TRUEFALSE来自CFBase.h ; 他们#define -d为10
  • YESNO来自NSObjCRuntime.h 。 这是signed char被定义为BOOL ,如果支持__objc_no ,它的两个值是#define -d ((BOOL)1)((BOOL)0)或者__objc_yes / __objc_no

基础类一直使用BOOL ,这是一个用于signed chartypedef来表示它的布尔属性。 由于前两对被转换为int常量,所以使用它们可能会导致警告,尽pipe它可能正常工作。 然而, YESNO常量是以编译器最兼容的方式定义的,无论其版本如何。 因此,我build议在整个代码中一致地使用YESNO

实际上,在YESYES和“ true之间没有区别,它们都代表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! 

这是因为当BOOLtypes的值是1以外的非零值时,与YES的直接比较将失败。

这里是一个很好的文章给你。

我认为他们都可以。 但个人而言,我想使用YES / NO

我find了一个名为Objective-C运行时参考的文档 :

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

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

常量


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

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

宣布在
objc.h

我分享你的看法,虽然他们目前都定义相同,移植代码是一个痛苦,当你可能会发现TRUE!= true。 (确切地说,为什么我们不应该为TRUEtestingX == 1,因为有些语言使用-1,有些使用1)

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

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

如果你经常把代码转换成Java,那么你可能发现真假更好,所以search/replace的次数更less,但是我更容易与Cocoa保持一致。

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

而使用NSLog来查看结果就像这个小例子:

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