Iphone 要将NSString作为公式执行吗

Iphone 要将NSString作为公式执行吗,iphone,ios,nsstring,Iphone,Ios,Nsstring,我有一个NSString对象,其中指定了多个条件,如下所示: NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9"; NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2"; NSString*strFormula1=@“man\”==“man\”&&1您需要一

我有一个NSString对象,其中指定了多个条件,如下所示:

NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9";
NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2";

NSString*strFormula1=@“man\”==“man\”&&1您需要一个表达式解析器和计算器

试试这个:

您需要结合使用各种方法和铸造

你的第一个目标是:

if([@"\"man\"" isEqualToString:@"\"man\""] && 1 < 5 || 12 < 9) {
        //Forumla == TRUE
 }

如果您只有
可以使用字符串,正如
@qinfg
所建议的那样,您需要解析字符串中的整数和带有某种形式正则表达式的字符串,以确定您的变量。

只需使用
NSPredicate

NSString *strFormula1 = @"\"man\" == \"man\" && 1<5 || 12<9";
NSString *strFormula2 = @"\"pac@pac.com\" == \"pac1@pac1.com\" || 9==9 && 8>2 || 2==2";
NSString *strFormula3 = @"\"hello\" == \"world\"";

NSPredicate *predicate = [NSPredicate predicateWithFormat:strFormula1];
BOOL result = [predicate evaluateWithObject:nil]; //True

predicate = [NSPredicate predicateWithFormat:strFormula2];
result = [predicate evaluateWithObject:nil]; //True

predicate = [NSPredicate predicateWithFormat:strFormula3];
result = [predicate evaluateWithObject:nil]; //False
在我们的案例中,它返回:

("man" == "man" AND 1 < 5) OR 12 < 9 //1st Expression
"pac@pac.com" == "pac1@pac1.com" OR (9 == 9 AND 8 > 2) OR 2 == 2 //2nd Expression
"hello" == "world" //3rd Expression
(“man”==“man”和1<5)或12<9//1表达式
"pac@pac.com" == "pac1@pac1.com或(9==9和8>2)或2==2//2表达式
“你好”==“世界”//3rd表达式

这将是一个比@rishi(-1)更好的答案,因为Rahul需要一些东西来评估“
NSString
对象,但您所指的对象没有C实现。只有PHP和Java。不一定是合并到Objective C应用程序中最容易的事情。如果OP不想麻烦实现自己的解析器,那么使用JavaScriptCore框架怎么样?它接受CFStringRefs(因此NSStrings很好),并且它有一个功能齐全的数学表达式解析器,支持变量等。这仍然不能回答OP的问题。OP的问题措辞糟糕,很容易产生混淆和/或完全不正确的答案-1.在Objective-C中将字符串中的
==
s解析为
=
s可能不是一个好主意,因为这样比较的是内存地址,而不是实际的字符串内容。@Stefan不,这对谓词来说不是真的@Stefan还有,什么内存地址?整个表达式只是一个字符串,我没有传递任何对象…是的,对不起,我想你是对的。。。当我看到字符串之间的
==
s时,这是一种反射+我希望这个案例有一个
评估
方法,而不是
评估:nil
,但这个方法有效!
NSLog(@"%@", [predicate predicateFormat]);
("man" == "man" AND 1 < 5) OR 12 < 9 //1st Expression
"pac@pac.com" == "pac1@pac1.com" OR (9 == 9 AND 8 > 2) OR 2 == 2 //2nd Expression
"hello" == "world" //3rd Expression