我有一个应用程序,解决基于给定的知识和未知的物理问题..但它做错了方法..
假设我们有这个等式(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)"
在此先感谢,任何帮助都会非常棒
这里的问题是看看哪个变量是未知的,假设你有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个参数的调用,所有这些都是可选项,所以如果你同时尝试“if let”和它们,它就会起作用,这意味着另一个是unknow变量。
这是我能想到的“最干净”的解决方案。