NSExpression有什么用途?

如何使用NSExpression来计算(a + b) ^ 2, sum((a + b) / 2) NSExpression ? 我是NSExpression的初学者。

(a + b)^ 2如何在目标c中使用整个方块2。

NSExpression不是一个通用的mathexpression式求值器。 这意味着与NSPredicate一起使用来描述核心数据查询中的select标准。

NSExpression 对于评估目标c中的mathexpression式非常有用。

让我们看看如何使用NSExpressionfind数字的标准偏差

 NSArray *arrNumbers = @[@3, @6, @3, @8, @4, @12, @9, @11]; NSExpression *expression = [NSExpression expressionForFunction:@"stddev:" arguments:@[[NSExpression expressionForConstantValue:arrNumbers]]]; id value = [expression expressionValueWithObject:nil context:nil]; 

就这么简单。

以下是按类别分组的function列表。

1)统计方法列表

 average: sum: count: min: max: median: mode: stddev: 

2)算术function

 add:to: from:subtract: multiply:by: divide:by: modulus:by: abs: sqrt: log: ln: raise:toPower: exp: 

3)边界function

 ceiling: trunc: 

4)随机function

 random random: 

5)二进制算术函数

 bitwiseAnd:with: bitwiseOr:with: bitwiseXor:with: leftshift:by: rightshift:by: onesComplement: 

6)datefunction

 now 

7)string函数

 lowercase: uppercase: 

8)无操作

 noindex: 

NSExpression非常适合评估mathexpression式。 它不仅限于核心数据查询,而且您不需要额外的第三方库或编写自己的parsing器来将expression式评估为string。

要实际回答(a + b)^ 2;的问题)

 NSNumber *a = @4; NSNumber *b = @4; NSExpression *expression = [NSExpression expressionWithFormat:@"(%@ + %@)**2", a, b]; NSNumber *result = [expression expressionValueWithObject:nil context:nil]; NSLog(@"%@",result); 

NSExpression用于表示NSPredicate中的expression式。 它不适用于像你这样的任务。

其实,你可以用NSExpression来计算公式的值,但是这个用法是相当有限的。 为了评估任何mathexpression式,您需要使用一些algorithm(例如Shunting-yard)来创buildstringparsing器,或者只是重用像这样的库。