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
- 将Swift UnsafePointer <AudioStreamBasicDescription>转换为字典?
- 如何将数据从孩子传递给父视图控制器? 迅速
- 如何在Swift中testing一个variables的类?
- Swift 3将数据从一个ViewController传递到另一个ViewController
- 如何根据十进制值设置货币格式?
- iOS从Swift类/对象重新加载UITableView
- Swift 3 JSON NSFastEnumerationIterator没有下标成员
- 在swift中将NSData转换为sockaddr结构体
- 显示UIPopOverPresentationController时崩溃