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

时间:2010-11-28 04:09:40

标签: objective-c cocoa boolean

我很想使用int,并使0 == NO1 == YES和其他任何内容== undefined。 显然有一百万种方法可以做这样的事情,但对你来说这似乎是最好的方式?我能想到的问题包括简单性和内存占用(例如,如果我有很多这些?)。

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

另一种方式,

typedef enum { CPStatusUndefined, CPStatusAvailable, CPStatusUnavailable } CPStatus;

编辑,用例是:

我有一个很难计算的是/否属性。在检查时,会经常检查(通过UIMenuController,OFTEN),但除非用户选择它,否则永远不会检查它。我选择处理这个问题的方式是一个三型变量。第一次检查时,如果未定义,则计算是/否值并返回,之后返回yes / no值。

3 个答案:

答案 0 :(得分:5)

使用枚举。在Objective-C中,它们就像在C / C ++中一样工作

typedef enum {
  No = 0,
  Yes,
  Other
} tri_type;

tri_type myVar = No;

if( myVar == Yes || myVar == Other ) {
  // whatever
}

答案 1 :(得分:1)

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

[number boolValue] == YES;
[number boolValue] == NO;
[number boolValue] == nil; // or just number == nil

答案 2 :(得分:0)

如果您想节省大量内存,请使用字符。

char == 0,false char == 1,是的 否则,未定义。

显然,你需要在-1之类的地方初始化它。

这是obj-c比较器返回值的方式: 如果为0,它们是相等的。 如果是肯定的,则a> b 如果是否定的,则< B'/ P>

与上述相同。