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器,或者只是重用像这样的库。