我有一个应用程序,可以根据给定的已知和未知数来解决物理问题..但是这样做的方式是错误的。
假设我们有这个等式(d = v * t)
我们这里有三个变量..我的操作方式就是这样
let v = 10
let t = 5
let d = nil
let result = Double()
if d == nil && v != nil && t != nil {
result = v * t
}if v == nil && d != nil && t != nil {
result = d / t
}if t == nil && v != nil && d != nil {
result = d / v
}else{
result = nil
}
print(result) // "50"
显然这很令人头疼..这只是一个包含三个变量的小方程..如果我有20个方程,每个变量有5个变量,怎么办..这样输入起来会很累。.所以我想知道是否有一个变量只需输入方程式并调用.solve之类的方法
let equation = "d = v * t"
let knowns = [d:20,v:50]
let result = equation.solve(usingKnowns: knowns)
print(result) // "Optional(t = 0.4)"
预先感谢, 任何帮助都将非常棒
答案 0 :(得分:0)
这里的问题是看什么变量是未知的,假设您有X个变量,并且您总是得到X-1个变量,而1个未知数,您实际上不需要检查已知变量是否为!= nil。>
我建议您使用另一种可能性:
func resolve(a: Double?, b: Double?, c: Double?)-> Double{
//Default value
var result: Double = 0.0
//a missing
if let b = b, let c = c{
result = b*c
}
//b missing
if let a = a, let b = b{
result = a/b
}
//c missing
if let a = a, let c = c{
result = a/c
}
return result
}
在这种情况下,您只有一个带有3个参数的调用,所有这些参数都是可选的,因此,如果同时尝试两个带有2 o的“ if let”并且它起作用,则意味着另一个是unknow变量。 / p>
这是我能想到的“最干净”的解决方案。