【问题标题】:What values should I use for iOS boolean states?我应该为 iOS 布尔状态使用什么值?
【发布时间】:2012-12-17 19:04:54
【问题描述】:

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

YES
NO
TRUE
FALSE
true
false

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

【问题讨论】:

标签: ios boolean


【解决方案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】:

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

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

      • truefalse来自stdbool.h;他们是#define-d 和10
      • TRUEFALSE来自CFBase.h;他们是#define-d 和10
      • YESNO 来自 NSObjCRuntime.h。这就是signed chartypedef-ed 作为BOOL 的地方,它的两个值是#define-d 作为((BOOL)1)((BOOL)0)__objc_yes/__objc_no 如果支持objc_bool

      基础类始终使用BOOL,它是typedefsigned char,来表示其布尔属性。由于前两对转换为int 常量,因此使用它们可能会导致警告,尽管它可能会正常工作。但是,YESNO 常量是按照与编译器最兼容的方式定义的,无论其版本如何。因此,我建议在整个代码中始终使用YESNO

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

          其实YESTRUEtrue没有区别,它们都代表了1所代表的真实状态。

          NOfalseFALSE则代表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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-26
            • 1970-01-01
            • 1970-01-01
            • 2011-01-29
            • 1970-01-01
            • 1970-01-01
            • 2022-10-13
            • 2023-03-02
            相关资源
            最近更新 更多