我应该使用什么值的iOS布尔状态?
看来,在iOS中我有一些选项,似乎适合布尔值:
YES NO TRUE FALSE true false
我应该使用哪些? 在这种特殊情况下,我隐藏了一个标签,所以我应该将hidden
属性设置为YES
, TRUE
或true
?
简短的回答:您应该首选YES
和NO
来设置BOOL
types的基础属性。
对于长的答案,让我们先看看这些常量定义在哪里:
-
true
和false
来自stdbool.h
; 他们#define
-d为1
和0
-
TRUE
和FALSE
来自CFBase.h
; 他们#define
-d为1
和0
-
YES
和NO
来自NSObjCRuntime.h
。 这是signed char
被定义为BOOL
,如果支持__objc_no
,它的两个值是#define
-d((BOOL)1)
和((BOOL)0)
或者__objc_yes
/__objc_no
。
基础类一直使用BOOL
,这是一个用于signed char
的typedef
来表示它的布尔属性。 由于前两对被转换为int
常量,所以使用它们可能会导致警告,尽pipe它可能正常工作。 然而, YES
和NO
常量是以编译器最兼容的方式定义的,无论其版本如何。 因此,我build议在整个代码中一致地使用YES
和NO
。
实际上,在YES
, YES
和“ true
之间没有区别,它们都代表1代表的真实状态。
而NO
, false
, FALSE
表示一个由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
types的值是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");