如何用多个变量在 swift 中建立方程式?

How do you make an equation in swift with multiple variables?

我正在尝试做一些事情,我正在尝试使用 Swift 中的方程式。这是等式:

((((((((((calculation.d/100)/2) * Int(0.98) * (sqrt(calculation.vbottle * 1005.967 * (calculation.psi + (calculation.psi * (calculation.vbottle - (calculation.vol/1000))/2)/2)  * ((((calculation.d/100)/2) * Int(0.98) * (sqrt(calculation.vbottle * 1005.967 * (calculation.psi + (calculation.psi * (calculation.vbottle - (calculation.vol/1000))/2)/2) /1005.967 * (3.14159 * ((d / 100)/2) * ((d / 100)/2)))) - (((calculation.mempty/1000) + ((calculation.vol * 0.972)/1000))/2) * calculation.g) / (((calculation.mempty/1000) + ((calculation.vol * 0.972)/1000))/2)) * ((1005.967 * (calculation.vol / 1000000) / (((calculation.d/100)/2) * Int(0.98) * (sqrt(calculation.vbottle * 1005.967 * (calculation.psi + (calculation.psi * (calculation.vbottle - (calculation.vol/1000))/2)/2) * 6894.76))))) * 2) sin 2(calculation.theta) / calculation.g) * (1 - calculation.dc))

这可能看起来很复杂,但如果您理解它,它就不是(对于计算机)。所有变量都已定义,错误消息显示:

调用中缺少参数 'verbatim' 的参数和另一个错误:未终止的字符串文字

我不确定为什么以及每当我 google 它出现时,实际结果永远不会出现,而当出现时,它总是关于 Playgrounds,而不是用于制作应用程序的实际 Swift和东西。

编辑:

这是可重现的例子:

'''

//
//  ContentView.swift
//  MRE File
//
//  Created by Go Peter on 2021/06/18.
//

import SwiftUI

struct Calculation {
    var vbottle:Int = 2
    var g:Int = Int(9.807)
    var vol:Int = 250
    var d:Int = 2
    var theta:Int = 90
    var psi:Int = 40
    var mempty:Int = 70
}

struct ContentView: View {
    var body: some View {
        Text("\(((((((((((calculation.d/100)/2) * Int(0.98) * (sqrt(calculation.vbottle * 1005.967 * (calculation.psi + (calculation.psi * (calculation.vbottle - (calculation.vol/1000))/2)/2)  * ((((calculation.d/100)/2) * Int(0.98) * (sqrt(calculation.vbottle * 1005.967 * (calculation.psi + (calculation.psi * (calculation.vbottle - (calculation.vol/1000))/2)/2) /1005.967 * (3.14159 * ((d / 100)/2) * ((d / 100)/2)))) - (((calculation.mempty/1000) + ((calculation.vol * 0.972)/1000))/2) * calculation.g) / (((calculation.mempty/1000) + ((calculation.vol * 0.972)/1000))/2)) * ((1005.967 * (calculation.vol / 1000000) / (((calculation.d/100)/2) * Int(0.98) * (sqrt(calculation.vbottle * 1005.967 * (calculation.psi + (calculation.psi * (calculation.vbottle - (calculation.vol/1000))/2)/2) * 6894.76))))) * 2) sin 2(calculation.theta) / calculation.g) * (1 - calculation.dc)))m")
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

'''

我看到了一些错误:

  1. 您需要在 /1005.967 中的 / 运算符之后添加一个 space -- 可能还有其他类似的位置。
  2. 在表达式末尾附近,有一个浮动 sin,它前面没有运算符,后面根本没有括号
  3. 有很多地方你指的只是 d,但可能是指 calculation.d
  4. 您的左括号和右括号数量不匹配。
  5. 您实际上并没有在您的视图中定义 Calculation 属性,因此目前还没有任何计算可做。

因为我不知道其中一些内容的意图,所以我无法真正为您修复它。但是,我建议尝试稍微清理一下代码 —— 至少,它会更容易调试。

首先,将其从插值 String 移出并移入计算 属性:

var calc : Int { //Int? -- see comment about this
  //your calculation here
} 

var body: some View {
  Text("\(calc)m")
}

然后,我会将计算分解为 很多 更小的表达式,这些表达式更具可读性,并且比尝试筛选这么多括号更容易让您发现错误,等。即使计算机理论上可以处理长而难以阅读的表达式,这对我们人类来说也是一个具有挑战性的调试问题。

如果您真的想要 Int 这些属性,我也会感到非常惊讶。你有很多地方在做 Int(0.98) 之类的事情,这没有意义,因为它会四舍五入到 1。也许您想要对所有内容使用 DoubleFloat?当您开始分解指令时,您会看到编译器一旦能够正确解析所有内容就会开始发现更多错误,您最终会在现有表达式中的 Int 和 Double 等类型之间出现类型不匹配。