0

也许我的标题有点混乱,所以我会用一个场景来说明

假设我想比较 2 个 int 值并根据逻辑比较返回一个布尔值。

if (int1 > int2) return true;
if (int3 < int4) return true;
if (int5 == int6) return true;
if (int7 >= int8) return true;
if (int9 <= int10) return true;

但是我不想手动编写这个,而是想做类似的事情

- (bool)compareVal1: (int)val1 withVal2: (int)val2 usingLogical: (NSString*)logic
{
     if (val1 "logic" val2) return true;
}

我想要一个通用函数,它可以用来表示我想要的 5 个逻辑比较。我不确定这是否可以实现,但如果您有任何其他解决方案,请告知:)

4

2 回答 2

3

首先,我将使用枚举而不是 NSString 来决定使用哪个逻辑运算符。所以尝试这样的事情:

typedef enum {

    GREATER_THAN,
    LESS_THAN,
    LESS_THAN_OR_EQUAL,
    GREATER_THAN_OR_EQUAL,
    EQUALS

} logicalOperator;    

实际功能如下所示:

+ (bool)compareVal1: (int)val1 withVal2: (int)val2 usingLogical: (logicalOperator)op
{
    switch(op) {

        case GREATER_THAN:
            return (val1 > val2);

        case LESS_THAN:
            return (val1 < val2);

        case LESS_THAN_OR_EQUAL:
            return (val1 <= val2);

        case GREATER_THAN_OR_EQUAL:
            return (val1 >= val2);

        case EQUALS:
            return (val1 == val2);
    }
}

我还将该函数设为静态/类函数,因为它不会真正影响类的特定实例,而是对传入的值进行操作的实用函数。此函数用法的示例如下:

bool isGreater = [MyClass compareVal1: 4 withVal2: 3 usingLogical: GREATER_THAN];
于 2012-09-26T03:31:21.583 回答
2

不知道为什么不能直接解析字符串并返回表达式的结果。例如(仅说明两个运算符):

- (bool)compareVal1: (int)val1 withVal2: (int)val2 usingLogical: (NSString*)operator
{
   if([operator isEqualTo:@">"])
   {
      return (val1 > val2);
   }
   else if ([operator isEqualTo:@"<"]) 
   {
      return (val1 < val2);
   }
   // similar logic statements for other operators
}

不过,更相关的是,当您可以只编写评估本身时,为什么还需要一种方法来执行此操作呢?

于 2012-09-26T03:27:24.327 回答