似乎在iOS中我有许多似乎适合布尔值的选项:
YES
NO
TRUE
FALSE
true
false
我应该使用哪些?在这种特殊情况下,我隐藏了一个标签,所以我应该将hidden
属性设置为YES
,TRUE
还是true
?
答案 0 :(得分:13)
简短回答:您应该更喜欢YES
和NO
来设置BOOL
类型的基础属性。
对于长期答案,让我们首先看看这些常量定义在哪里:
true
和false
来自stdbool.h
;它们是#define
- d为1
和0
TRUE
和FALSE
来自CFBase.h
;它们是#define
- d为1
和0
YES
和NO
来自NSObjCRuntime.h
。这是signed char
typedef
- BOOL
编辑的地方,其中两个值为#define
- d为((BOOL)1)
和((BOOL)0)
或{{ 1}} / __objc_yes
如果支持__objc_no
。基础类始终使用objc_bool
({1}} BOOL
来表示其布尔属性。由于前两对转换为typedef
常量,因此使用它们可能会产生警告,但无论如何它都可能正常工作。但是,signed char
和int
常量是以最兼容的方式为编译器定义的,无论其版本如何。因此,我建议您在整个代码中始终使用YES
和NO
。
答案 1 :(得分:6)
实际上YES
,TRUE
和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
类型的值为非零值时,与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");