2012-09-26 31 views
0

也許我的標題是有點混亂,所以我會用一個場景如何使一個通用邏輯比較函數在ObjC

讓我們說,我想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邏輯比較一般的功能。 我不確定這是否可以實現,但如果您有任何其他解決方案,請告知:)

回答

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]; 
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 
} 

更貼切,不過,你爲什麼需要這樣做時,你可以寫評價本身,而不是一個方法?