2017-11-20 2 views
0

So habe ich eine Zeichenfolge formula, die sagen lassen ist:Swift 4 NSExpression mit mehreren Funktionen

let testValue = 10 
let formula = "(max(testValue - 20,0) * 14) + testValue - max(testValue - 20,0)" 

ich einfache Arithmetik tun, Multiplikation, Division, subtrahiert, ect aber wie würde ich die Max-Funktion in dieser kombiniere Schnur?

Ich dachte, ich müsste max zu etwas ändern, das ich substring und dann jede einzelne Funktion und Schleife durch die Instanzen tun kann, aber gibt es einen besseren Weg oder ist das der Weg, es zu tun? Wie |@Max(x,y)|.

Gibt es auch eine bestimmte Syntax, wie ich keine Beispiele für die Verwendung von Max, Min, Summe, Avg, ect finden konnte - vielleicht verstehe ich nur die Dokumentation nicht.

//Current way 
extension String { 
    var expression: NSExpression { 
     return NSExpression(format: self) 
    } 
} 

let results = formula.expression.expressionValue(with: nil, context: nil) as? Int 

Antwort

0

Ich fand es heraus.

Für jeden, der braucht diese - Sie eine beliebige Zeichenfolge und Nutzung nehmen:

functionName(x) für die meisten Funktionen wie sqrt, multiplyby, trunc, ceiling, ect

Und dann für die sechs mit mehreren Variablen (max, min, count, average, sum, und eine andere Ich vergesse) verwenden Sie functionName({x,y}).

Alle können in einer Zeichenfolge mit expressionValue(with: nil, context: nil)

verwendet werden