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

And*_*rew 11 boolean ios

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

YES
NO
TRUE
FALSE
true
false
Run Code Online (Sandbox Code Playgroud)

我应该使用哪些?在这种特殊情况下,我躲在一个标签,所以我应该设定hidden属性YES,TRUEtrue

das*_*ght 13

简短的回答:你应该更喜欢YESNO设置类型的基础属性BOOL.

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

  • truefalse来自stdbool.h; 他们是#define-d as 10
  • TRUEFALSE来自CFBase.h; 他们是#define-d as 10
  • YES并且NO是从NSObjCRuntime.h.这是signed chartypedef-ed为BOOL,它的两个值#define作为-d ((BOOL)1)((BOOL)0)__objc_yes/ __objc_no如果objc_bool被支持.

基础课统一使用BOOL,这是一种typedefsigned char,来表示其布尔属性.由于前两对转换为int常量,因此使用它们可能会产生警告,但无论如何它都可能正常工作.在YESNO常量,然而,在你的编译器最兼容的方式定义,无论它的版本.因此,我建议您在整个代码中使用YESNO始终如一.


Mid*_* MP 6

实际上两者之间没有区别YES,TRUEtrue那些都代表一个由1代表的真实状态.

并且NO,false,FALSE是表示由表示的假状态0.

您还可以使用:

BOOL aBool = 1;
Run Code Online (Sandbox Code Playgroud)

这相当于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");
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

b is YES!
b is not YES!
Run Code Online (Sandbox Code Playgroud)

这是因为当BOOL类型的值是除1以外的非零值时,与YES的直接比较将失败.

这是一篇很好的文章给你.