代码之家  ›  专栏  ›  技术社区  ›  Kenny Winker

在objective-c中实现真/假/未定义三分法变量的最佳方法

  •  2
  • Kenny Winker  · 技术社区  · 14 年前

    我习惯用 int ,并使 0 == NO , 1 == YES ,以及任何其他==未定义的内容。 很明显,有无数种方法可以做到这一点,但是对你来说什么是最好的方法呢?我可以考虑的问题包括简单性和内存占用(例如,如果我有很多这样的问题呢?).

    另一种方法是使用两个BOOLs,一个用于 isDefined ,一个用于 value

    另一种方式,

    typedef enum { CPStatusUndefined, CPStatusAvailable, CPStatusUnavailable } CPStatus;

    编辑,用例是:

    我有一个很难计算的是/否属性。当它被检查时,它经常被检查(通过 UIMenuController ,通常),但除非用户选择它,否则不会选中它。我选择的处理方法是一个三类型变量。第一次检查时,如果未定义,则计算“是/否”值并返回,然后返回“是/否”值。

    3 回复  |  直到 14 年前
        1
  •  5
  •   Lee    14 年前

    使用枚举。在ObjuleC中,它们的工作方式和C/C++一样。

    typedef enum {
      No = 0,
      Yes,
      Other
    } tri_type;
    
    tri_type myVar = No;
    
    if( myVar == Yes || myVar == Other ) {
      // whatever
    }
    
        2
  •  1
  •   d11wtq Vadim Baryshev    14 年前

    怎么样 NSNumber ,因为它可以 nil ?

    [number boolValue] == YES;
    [number boolValue] == NO;
    [number boolValue] == nil; // or just number == nil
    
        3
  •  0
  •   Dexter    14 年前

    如果您想保留最大的内存量,请使用char。

    char==0,假 char==1,真 否则,未定义。

    显然,您需要将其初始化为-1。

    这是obj-c执行比较器返回值的方式: 如果为0,则它们相等。 如果为正值,则a>b 如果为负,则a<b

    同上。