我应该为 iOS 布尔状态使用啥值?
Posted
技术标签:
【中文标题】我应该为 iOS 布尔状态使用啥值?【英文标题】:What values should I use for iOS boolean states?我应该为 iOS 布尔状态使用什么值? 【发布时间】:2012-12-17 19:04:54 【问题描述】:在 ios 中,我似乎有许多适合布尔值的选项:
YES
NO
TRUE
FALSE
true
false
我应该使用哪些?在这种特殊情况下,我隐藏了一个标签,所以我应该将hidden
属性设置为YES
、TRUE
还是true
?
【问题讨论】:
***.com/q/615702/4479896的可能重复 【参考方案1】:使用 YES 和 NO 相同,分别使用 TRUE 和 FALSE 或 1 和 0。
并使用 NSLog 像这个小例子一样查看结果:
BOOL result;
result = YES;
NSLog(@"my boolean result is %@",result ? @"Yes" : @"No");
【讨论】:
【参考方案2】:我认为他们都还好。但就个人而言,我想使用YES
/NO
。
我找到了一个名为Objective-C Runtime Reference的文档:
布尔值 这些宏定义了方便的常量来表示布尔值。
#define YES (BOOL)1 #define NO (BOOL)0
常量
是的 将 YES 定义为 1。 适用于 iOS 2.0 及更高版本。 在 NSObjCRuntime.h 中声明。
没有 将 NO 定义为 0。 适用于 iOS 2.0 及更高版本。 在 NSObjCRuntime.h 中声明。
声明于 objc.h
【讨论】:
【参考方案3】:简短回答:您应该更喜欢 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
-ed 作为BOOL
的地方,它的两个值是#define
-d 作为((BOOL)1)
和((BOOL)0)
或__objc_yes
/__objc_no
如果支持objc_bool
。
基础类始终使用BOOL
,它是typedef
的signed char
,来表示其布尔属性。由于前两对转换为int
常量,因此使用它们可能会导致警告,尽管它可能会正常工作。但是,YES
和 NO
常量是按照与编译器最兼容的方式定义的,无论其版本如何。因此,我建议在整个代码中始终使用YES
和NO
。
【讨论】:
【参考方案4】:我同意您对此的看法,虽然它们目前的定义都是相同的,但当您发现 TRUE != true 时,移植代码会很痛苦。 (正是为什么我们永远不应该测试 X == 1 是否为 TRUE,因为有些语言使用 -1 而有些使用 1)
我认为这可能是个人喜好,主要是关于未来的端口。
我遵循 TRUE 和 FALSE 选项,以便更容易移植到 C/C++。
如果您经常将代码转换为 Java,您可能会发现 true 和 false 更好,这样搜索/替换的次数会更少,但我发现与 Cocoa 的一致性更容易。
【讨论】:
【参考方案5】:其实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
类型的值是 1 以外的非零值时,与 YES 的直接比较将失败。
这是一个不错的article。
【讨论】:
以上是关于我应该为 iOS 布尔状态使用啥值?的主要内容,如果未能解决你的问题,请参考以下文章
在ios uiwebview objective-c中检查布尔值是yes还是no时出错