【问题标题】:Swift - Resolving a math operation in a stringSwift - 解析字符串中的数学运算
【发布时间】:2014-11-03 17:05:05
【问题描述】:

只是一个简短的问题。在 Swift 中可以解决以下代码:

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

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

var a: String; 
var b: String;

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

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

【问题讨论】:

    标签: swift


    【解决方案1】:

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

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

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

    您也可以使用第三方库,例如DDMathParser

    【讨论】:

      【解决方案2】:

      斯威夫特 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】:

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

        "3*3"
        

        和这个一样

        "String"
        

        您在" 中输入的所有内容都是一个字符串。

        第二个示例允许您从常量、变量、文字和表达式的组合中构造一个新的字符串值:

        "\(3*3)"
        

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

        您插入了一个可摆动转换并创建预期结果的字符串表达式。

        【讨论】:

          【解决方案4】:

          您可以尝试使用class 中的evaluatePostfixNotationString 方法。

          整个项目是关于从相机图像中识别数学表达式并进行计算。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-08-25
            • 2020-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-02
            • 1970-01-01
            相关资源
            最近更新 更多