当我浏览Swift文档时,我了解到有两种方法可以初始化"一个类中的变量。
class Vehicle {
var numberOfWheels = 4
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) per hour"
}
func makeNoise() {
print("vroom vroom")
}
}
class Bicycle: Vehicle {
var hasBasket = true
}
class Vehicle {
var numberOfWheels: Int
var currentSpeed: Double
init(numberOfWheels: Int, currentSpeed: Double) {
self.numberOfWheels = numberOfWheels
self.currentSpeed = currentSpeed
}
var description: String {
return "traveling at \(currentSpeed) per hour"
}
func makeNoise() {
print("vroom vroom")
}
}
class Bicycle: Vehicle {
var hasBasket: Bool
init() {
hasBasket = true
super.init(numberOfWheels: 2, currentSpeed: 10)
}
}
当然这两个代码示例有不同的结果,但总的来说,第一种方法似乎更清晰(代码更少)。
为什么我会使用另一个而你是否看到任何一个解决方案中可以简化的问题或事情?
答案 0 :(得分:1)
您的第二个方法(init)允许您传入使类更灵活的变量。例如,如果您想通过具有不同轮数的Vehicle类实例化各种车辆,您可以传入:
let atv = Vehicle(numberOfWheels: 4, currentSpeed: 20)
let motorcycle = Vehicle(numberOfWheels: 2, currentSpeed: 40)
如果值始终与为所有类传递一些常量值相同,那么默认值就更好了。
另一个选项是在执行此操作后实例化然后更新属性:
let atv = Vehicle()
atv.numberOfWheels = 4
但由于各种原因,可能需要初始化参数:
安全。您可能希望在初始化
可读性。更紧凑。
灵活性。您可以创建多个便利性,以便使用不同的参数初始化您的车辆类。假设numberOfWheels不相关,但您确实想要用颜色初始化。您可以设想一个方便的初始化,以便您可以这样初始化:
让rainbowVain =车辆(颜色:UIColor.White)
对于您的第一个初始化方法,有时代码在此格式中更清晰一些,尤其是对于viewControllers。
var description: String {
return "traveling at \(currentSpeed) per hour"
}
这会进入计算属性,如果感兴趣,您可以查看更多内容。希望这会有所帮助。