Swift将string公式转化为实际计算

我有几个公式存储在一个Plist,如A * B。我想知道如何可以把这个公式作为一个string存储在一个Plist中,并将其用作一个实际的计算公式。 我尝试着把公式写成\(A)* \(B),然后设置A和B,然后尝试使用这个公式,但是它不起作用。 有什么build议么?

let A = 5 let B = 2 println (formula) 

实际上打印出“\(A)* \(B)”

Xcode 8.3.1•Swift 3.1

 extension String { var expression: NSExpression { return NSExpression(format: self) } } let a = 5 let b = 2 let intDictionary = ["a": a,"b": b] var formula = "a * b" if let timesResult = formula.expression.expressionValue(with: intDictionary, context: nil) as? Int { print(timesResult) // 10 } formula = "(a + b) / 2" if let intAvgResult = formula.expression.expressionValue(with: intDictionary, context: nil) as? Int { print(intAvgResult) // 3 } let x = 5.0 let y = 2.0 let z = 3.0 let doubleDictionary = ["x": x, "y": y, "z": z] formula = "(x + y + z) / 3" if let doubleAvgResult = formula.expression.expressionValue(with: doubleDictionary, context: nil) as? Double { print(doubleAvgResult) } 

使用NSExpression

 NSExpression *expression = [NSExpression expressionWithFormat:@"4 + 5 - 2**3"]; id value = [expression expressionValueWithObject:nil context:nil]; // => 1 

expression式创build是格式化的,所以你可以input你的参数作为等式的一部分。

更多信息在这里 。

Xcode 8中的@Leo for Swift 3(与obj-c相对),它看起来像这样:

 let mathExpression = NSExpression(format: "4 + 5 - 2**3") let mathValue = mathExpression.expressionValue(with: nil, context: nil) as? Int