11

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

YES
NO
TRUE
FALSE
true
false

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

4

5 回答 5

13

简短回答:您应该更喜欢YESandNO设置 type 的基础属性BOOL

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

  • true并且false来自stdbool.h; 它们是#define-d10
  • TRUE并且FALSE来自CFBase.h; 它们是#define-d10
  • YES并且NO来自NSObjCRuntime.h。这是 -ed as 的地方signed chartypedefBOOL的两个值是#define-d as((BOOL)1)((BOOL)0)or __objc_yes/ __objc_noifobjc_bool被支持。

基础类始终使用BOOLfortypedefsigned char表示其布尔属性。由于前两对被转换为int常量,使用它们可能会导致警告,尽管它可能会正常工作。然而,YESNO常量以最适合您的编译器的方式定义,无论其版本如何。因此,我建议在整个代码中始终使用YES和。NO

于 2013-01-03T12:21:59.517 回答
6

其实和没有区别YES,都代表一个真实的状态,用1表示。TRUEtrue

NO, false,FALSE则代表0所代表的虚假状态。

您还可以使用:

BOOL aBool = 1;

等价于BOOL aBool = true;andBOOL 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类型的值为 1 以外的非零值时,与 YES 的直接比较将失败。

这是一篇不错的文章

于 2013-01-03T12:09:46.253 回答
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 中声明

于 2013-01-03T12:22:08.220 回答
0

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

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

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

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

于 2013-01-03T12:15:20.637 回答
0

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

并使用 NSLog 来查看结果,如下所示:

BOOL result;
result = YES;
NSLog(@"my boolean result is %@",result ? @"Yes" : @"No");
于 2013-07-30T14:14:26.290 回答