只是一个简短的问题。在Swift中,可以解决以下代码:
var a: String;
a = "\(3*3)";
将解决字符串中的算术运算。但我无法弄清楚,为什么以下这种变化不起作用。
var a: String;
var b: String;
b = "3*3";
a = "\(b)";
在这种情况下,var a中的算术运算将无法解析。任何想法为什么以及如何才能开始工作。如果这样可行,有些事情会容易得多。谢谢你的回答。
答案 0 :(得分:25)
在第二种情况下,您要插入字符串,而不是算术表达式。在您的示例中,它是您在编译时选择的字符串,但通常它可能是来自用户的字符串,或者是从文件或Web上加载的。换句话说,在运行时b
可能包含一些任意字符串。编译器在运行时不可用于将任意字符串解析为算术。
如果要在运行时将任意字符串计算为算术公式,可以使用NSExpression
。这是一个非常简单的例子:
let expn = NSExpression(format:"3+3")
println(expn.expressionValueWithObject(nil, context: nil))
// output: 6
您还可以使用DDMathParser
等第三方库。
答案 1 :(得分:1)
这不会被解决,因为这不是算术运算,这是一个字符串:
"3*3"
与此相同
"String"
你放入"
的所有内容都是一个字符串。
第二个例子允许你从常量,变量,文字和表达式的混合中构造一个新的String值:
"\(3*3)"
由于字符串插值\()
您插入了一个字符串表达式,可以转换并创建预期结果。
答案 2 :(得分:1)
Swift 4.2
let expn = "3+3"
print(expn.expressionValue(with: nil, context: nil))
但是我也有一种解决方案,它不是最有效的方法,但是如果您确定它只是“ y + x”而不是更长的字符串,则可以在某些情况下使用。
var yNumber: Int!
var xNumber: Int!
let expn: String? = "3+3"
// Here we take to first value in the expn String.
if let firstNumber = expo?.prefix(1), let myInt = Int(firstNumber){
// This will print (Int : 3)
print("Int : \(myInt)")
// I set the value to yNumber
yNumber = myInt
}
// Here we take the last value in the expn string
if let lastNumber = optionalString?.suffix(1), let myInt = Int(lastNumber){
// This will print (Int : 3)
print("Int : \(myInt)")
// I set the value to xNumber
xNumber = myInt
}
// Now you can take the two numbers and add
print(yNumber + xNumber)
// will print (6)
我不推荐这样做,但在某些情况下可以使用
答案 3 :(得分:0)
您可以尝试使用该 class 中的 evaluatePostfixNotationString
方法。
整个项目是关于从相机图像中识别数学表达式并进行计算。