iOS obtiene los resultados de cálculo de fórmulas matemáticas de cadenas, operaciones condicionales de cadenas y operaciones lógicas

prefacio

Durante el desarrollo, cuando varios cuadros de entrada están involucrados en la vinculación del cálculo, la fórmula devuelta por el servidor se calcula automáticamente y se muestra en el cuadro de entrada correspondiente.

Por ejemplo la siguiente formula

@"{width}*{height}*0.5+1"

O fórmulas más complejas, el código {width} en el código reemplaza el valor, y la siguiente cadena se obtiene después del reemplazo en la lógica del código

@"20*30*0.5+1"

Es posible que la fórmula en los negocios reales sea más complicada que esto.
Solo un colega dijo que JavaScript tiene una función eval que puede resolver los problemas anteriores y obtener el resultado directamente.
Aquí viene la inspiración. Jaja JavaScriptCore...
no digas mucho y ve directamente al código

+ (CGFloat)evalCaculateStringFormulaJavaScript:(NSString *)string{
    
    
    //去空格
    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if (string.length == 0) {
    
    
        return 0;
    }
    JSContext *context = [[JSContext alloc] init];
    JSValue *jsFunction = [context evaluateScript:[NSString stringWithFormat:@"(function(){  return eval(%@) })",string]];
    return [[[jsFunction callWithArguments:nil] toNumber] floatValue];
}

Si el valor devuelto es un número de punto flotante, puede haber problemas de precisión, que pueden manejarse adecuadamente, por lo que no diré mucho aquí.

Operaciones condicionales y lógicas de cadenas

El método es básicamente el mismo que el anterior, pero recuerde agregar comillas simples para que la comparación de cadenas se ajuste al método de escritura de JavaScript.
Por ejemplo

//字符串对比结果
@"'ac'=='ac'"
@"'ac'=='dc'"

No hay necesidad de comparación numérica.
el código se muestra a continuación

+ (BOOL)evalJavaScript:(NSString *)string{
    
    
    BOOL result = false;
    //去空格
    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if (string.length == 0) {
    
    
        return result;
    }
    
    JSContext *context = [[JSContext alloc] init];
    JSValue *jsFunction = [context evaluateScript:[NSString stringWithFormat:@"(function(){  return eval(%@) })",string]];
    return [[jsFunction callWithArguments:nil] toBool];
}

Supongo que te gusta

Origin blog.csdn.net/sky_long_fly/article/details/126628251
Recomendado
Clasificación