在浏览 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)
}
}
当然这两个代码示例有不同的结果,但总的来说,第一种方法似乎更简洁(代码更少)。
为什么我会使用一个而不是另一个,您是否发现任何问题或可以在任一解决方案中简化的事情?
最佳答案
您的第二个方法 (init) 允许您传入变量,这使类更加灵活。例如,如果您想通过具有不同数量车轮的 Vehicle 类实例化各种车辆,您可以传入:
let atv = Vehicle(numberOfWheels: 4, currentSpeed: 20)
let motorcycle = Vehicle(numberOfWheels: 2, currentSpeed: 40)
就您的观点而言,如果值始终相同,则默认值比必须为所有类传递一些常量值要好得多。
另一种选择是实例化,然后在这样做之后更新属性:
let atv = Vehicle()
atv.numberOfWheels = 4
但是由于各种原因可能需要能够使用参数进行初始化:
安全。您可能希望要求这些类属性在初始化时获得值
可读性。更紧凑。
灵 active 。您可以创建多个便利的 init,以便您可以使用不同的参数初始化您的车辆类别。说 numberOfWheels 是无关紧要的,但你确实想用颜色初始化。您可以想象一个方便的 init,这样您就可以像这样初始化:
让 rainbowVain = Vehicle(color: UIColor.White)
对于您的第一个初始化方法,有时这种格式的代码会更简洁一些,尤其是对于 viewControllers。
var description: String {
return "traveling at \(currentSpeed) per hour"
}
这涉及计算属性,如果有兴趣,您可以深入研究。希望这对一些人有所帮助。
关于ios - 初始化程序与默认属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941192/