评估NSExpression中的值

时间:2016-06-20 06:16:32

标签: ios swift nsexpression

我使用NSExpression评估以下操作。但是我得到了NSInvalidArgumentException错误。请让我知道如何评估以下操作。谢谢你提前

  let formula:NSString = "((y*4)⁄5)"
    formula=formula.stringByReplacingOccurrencesOfString("y", withString: "8")
    let expression = NSExpression(format: formula as String)
    if let convertedValue = expression.expressionValueWithObject(nil, context: nil) as? NSNumber {
        formula=NSNumber(float:convertedValue.floatValue).stringValue
       }

1 个答案:

答案 0 :(得分:0)

有点晚了,但这是为了别人的利益。当你改变它时,formula应该是var,但可能是复制错误,或者你的代码永远不会被编译。

我将你的代码复制到一个游乐场并得到了类似的错误,但只有使用替换方法得到的表达式。逐字逐句地检查字符串我终于发现你的“/”是不同的东西。看到不同? / ⁄。我已经为Swift 3更新了它;似乎有很多尴尬的类型转换!

var formula = "y*4/5"
//"((y*4)⁄5)" : what you had, brackets were superfluous but ok
formula = formula.replacingOccurrences(of: "y", with: "8")    

let expression: NSExpression = NSExpression(format: formula)

if let convertedValue = expression.expressionValue(with: nil, context: nil) {
  let formula = String(convertedValue as! Float)
  print(formula)
}

请注意,您会得到整数答案。如果你想要一个真实的结果,你必须在其中一个操作数上加上'.0'。