如何在ObjC中进行通用逻辑比较功能

时间:2012-09-26 03:08:01

标签: objective-c

也许我的标题有点令人困惑所以我会用场景说明

假设我想在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个逻辑比较。 我不确定这是否可以实现,但如果您有任何其他解决方案,请告知:)

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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
}

更有针对性的是,为什么你只需要编写评估本身就需要一种方法来实现这一点?