2014-11-03 86 views
11

只是一个简短的问题。在Swift中可以解决以下代码:Swift - 解决字符串中的数学运算

var a: String; 
a = "\(3*3)"; 

字符串中的算术运算将被解决。但我无法弄清楚,为什么这种变化不起作用。

var a: String; 
var b: String; 

b = "3*3"; 
a = "\(b)"; 

在这种情况下,var a中的算术运算将不会被解析。任何想法为什么以及如何我可以开始工作。如果这可行的话,有些事情会更容易。感谢您的回答。

回答

1

这不会解决,因为这不是一个算术运算,这是一个字符串:

"3*3" 

与此相同,放在"这是一个字符串

"String" 

一切。

第二个例子让你从常量,变量,常量和表达式的混合构造一个新的字符串值:

"\(3*3)" 

这是可能的,因为串插\()

你插入一个字符串表达式转换并创建预期结果。

23

在第二种情况下,您插入的是字符串,而不是算术表达式。在您的示例中,它是您在编译时选择的字符串,但通常它可能是来自用户的字符串,或者从文件或通过网络加载的字符串。换句话说,在运行时b可能包含一些任意字符串。编译器在运行时不可用来将任意字符串解析为算术。

如果要在运行时将任意字符串评估为算术公式,可以使用NSExpression。这里是一个非常简单的例子:

let expn = NSExpression(format:"3+3") 
println(expn.expressionValueWithObject(nil, context: nil)) 
// output: 6 

您也可以使用第三方库像DDMathParser