我正在阅读The Swift Programming Language一书。
本书说,Init是在创建实例时设置类的初始化程序。 (我的理解是:通过创建实例,init()中的代码块将被执行)。
然而,这本书显示了super.init,但没有说明任何事情。
答案 0 :(得分:4)
官方文档确实涵盖了初始化超类的方面:
Bicycle的init()初始化程序首先调用super.init(),它调用Bicycle类的超类Vehicle的默认初始化程序。这可确保在Bicycle有机会修改属性之前,由Vehicle初始化numberOfWheels继承的属性。调用super.init()后,numberOfWheels的原始值将替换为新值2.
对应的示例代码:
超类:
class Vehicle {
var numberOfWheels = 0
var description: String {
return "\(numberOfWheels) wheel(s)"
}
}
子类:
class Bicycle: Vehicle {
override init() {
super.init()
numberOfWheels = 2
}
}
答案 1 :(得分:4)
让我们说你有一个对象
class myObject : NSObject {
var a : Int
var b : Int
init() {
a = 1
b = 2
super.init()
}
}
因为myObject
继承自NSObject,它必须调用super.init()来初始化它继承的对象的所有属性。而init会初始化特定于自定义对象的所有属性。
答案 2 :(得分:3)
super
只是对超类的引用,并且该超类具有init
方法,因此通过调用super.init()
,您可以调用不带参数的超类的init
方法。如果超类的init
方法有参数
class Animal {
init(name: String) {
}
}
您必须将参数传递给此方法
class Cat: Animal {
init() {
super.init(name: "Cat")
}
}
class PersianCat: Cat {
override init() {
super.init()
}
}