用于提取数学的类或结构(Swift)

时间:2016-02-23 20:32:50

标签: swift class structure

嗨,我对编程非常陌生,而且它正在变成一项使命。

我正在尝试创建一个具有函数的类来完成一些基本的数学运算。但是我仍在学习如何提取新值,或者可以在我的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”时,我得到一个未解决的标识符错误,或者我是否意味着要创建一个结构?

提前致谢。

1 个答案:

答案 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内的计算即可。这也意味着您的初始化程序只需要为ratelaps提供两个参数:

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
    }
}