嗨,我对编程非常陌生,而且它正在变成一项使命。
我正在尝试创建一个具有函数的类来完成一些基本的数学运算。但是我仍在学习如何提取新值,或者可以在我的class / func中传入或者传递给另一个。
这是我到目前为止所拥有的
class fuel {
var rate = 3.7
var laps: Double = 13.0
var totalFuel: Double
init (rate: Double, laps: Double, totalFuel: Double){
self.rate = rate
self.laps = laps
self.totalFuel = totalFuel
}
func fuelMaths (fuel: Double) -> Double {
self.totalFuel = (rate * Double(laps))
print(self.totalFuel)
}
} fuelMaths(self.totalFuel)
当我调用“fuelMaths”时,我得到一个未解决的标识符错误,或者我是否意味着要创建一个结构?
提前致谢。
答案 0 :(得分:0)
关于class vs. struct,这似乎是一个更好的选择,因为它只包含一些存储的属性,它们都是值类型。
即便如此,以下是问题:
1)您的fuelMaths
实例方法未返回值。您的实现应该类似于:
func fuelMaths(fuel:Double) -> Double {
// "someValue" contains your result
return someValue
}
2)您获得未解决的标识符错误的原因是您需要首先声明fuel
的实例,然后在该实例上调用fuelMaths
:
// someRate, someLaps, someTotal, and someFuelValue previously defined
let myFuel = fuel(rate: someRate, laps: someLaps, totalFuel: someTotal)
let myReturnedValue = myFuel.fuelMaths(someFuelValue)
最后,似乎totalFuel
是计算属性而不是存储属性的良好候选者。这消除了您对fuelMaths
方法的需求。只需执行计算属性正文中fuelMaths
内的计算即可。这也意味着您的初始化程序只需要为rate
和laps
提供两个参数:
var totalFuel: Double {
return rate * laps
}
init(rate:Double, laps:Double) { //... }
另外一件事,惯例是大写你的类和结构的名称。
编辑:
您的代码的类版本可能如下所示:
class Fuel {
var rate = 3.7 // default value tells compiler this is a Double
var laps = 13.0
var totalFuel: Double {
return rate * laps
}
init(rate:Double, laps:Double) {
self.rate = rate
self.laps = laps
}
}
您的代码的结构版本可能如下所示(请注意,它不需要您显式定义初始化程序,与类不同):
struct Fuel {
var rate = 3.7
var laps = 13.0
var totalFuel: Double {
return rate * laps
}
}