【问题标题】:Best way to implement a true/false/undefined trichotomy variable in objective-c在objective-c中实现真/假/未定义三分法变量的最佳方法
【发布时间】:2010-11-28 04:09:40
【问题描述】:

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

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

另一种方式,

typedef enum { CPStatusUndefined, CPStatusAvailable, CPStatusUnavailable } CPStatus;

编辑,用例是:

我有一个难以计算的是/否属性。当它被检查时,它会被频繁地检查(UIMenuController,OFTEN),但除非用户选择它,否则它永远不会被检查。我选择处理这个的方式是一个三型变量。第一次检查时,如果未定义,则计算是/否值并返回它,之后只返回是/否值。

【问题讨论】:

    标签: objective-c cocoa boolean


    【解决方案1】:

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

    typedef enum {
      No = 0,
      Yes,
      Other
    } tri_type;
    
    tri_type myVar = No;
    
    if( myVar == Yes || myVar == Other ) {
      // whatever
    }
    

    【讨论】:

    • @Kenny 不要太聪明。使用具有好听、有意义的名称的枚举。
    • @Kenny,为有意义的名字+1。
    【解决方案2】:

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

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

    【讨论】:

    • 如果numbernil,那么[number boolValue] 将是NO。最好只检查变量本身。
    • 布尔表示是否真的需要是真/假,还是用例更只是需要三个潜在值(即像enum)?究竟是什么用例?
    • @Dave 对不起,完全错过了你不是 OP :)
    • 用例是我有一个难以计算的是/否属性。当它被检查时,它会被频繁地检查(通过 UIMenuController,高达 20 次检查/秒),但除非用户选择它,否则它永远不会被检查。处理此问题的最佳方法似乎是三型。第一次检查时,如果未定义,则计算是/否值并返回它,之后只返回是/否值。
    • 那么绝对应该是一个枚举,我同意 Lee 和你自己的直觉。
    【解决方案3】:

    如果您想节省最多的内存,请使用字符。

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

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

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

    与上面的想法相同。

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 2010-09-23
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多