Xcode将一串方程转换为数学方程

Kin*_*Kin 1 string math xcode equation type-conversion

我想问一下如何将用户插入的字符串转换为数学公式,以便xCode理解.

例如,如果用户将其输入到文本字段."2*sin(2*M_PI*t)",其中等式中的"t"是代码内的变量,Xcode可以理解方程式

double answer = 2*sin(2*M_PI*t);

非常感谢Kin

das*_*ght 5

你可以只使用标准的cocoa类来完成它,但语法有点荒谬,而且设置的数量也是惊人的.

@interface MyExprTest : NSObject
-(void)run;
@end

@implementation MyExprTest

-(void)run {
    NSExpression *e = [(NSComparisonPredicate *)[NSPredicate
        predicateWithFormat:@"2*FUNCTION(2*PI*$t,'sin')==0"]
        leftExpression];
    NSMutableDictionary *vars = [NSMutableDictionary
                             dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithDouble:0.04], @"t",
                             nil];
    NSLog(@"%@", [e expressionValueWithObject:self context:vars]);
}

-(double)PI {
    return M_PI;
}

@end

@interface NSNumber (Trigonometry)
- (NSNumber*)sin;
@end

@implementation NSNumber (Trigonometry)

- (NSNumber*) sin {
    double result = sin([self doubleValue]);
    return [NSNumber numberWithDouble:result];
}

@end

int main (int argc, const char * argv[]) {
    MyExprTest *t = [[MyExprTest alloc] init];
    [t run];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • t你的表情变得$t让你可以从引用它vars的字典
  • M_PI简直就成了PI; 请注意添加的方法来支持它
  • 没有内置的三角函数; 看看如何FUNCTION和一个类别来解决它.