本类必选属性的构造函数。
/*
必选属性的构造过程:
1、给自己的属性分配空间并设置初始值
2、调用父类的构造函数,给父类的属性分配空间并设置初始值
以上这两个顺序和OC相比是完全相反的,OC中是先调用父类的方法,然后给自己的属性分配空间并设置初始值。
var name: String
//override表示重写
override init() {
name = "zhang"
super.init()
}
*/
class Person: NSObject {
var name: String
//override表示重写
override init() {
name = "zhang"
super.init()
}
}
子类的必选属性的构造过程。
/*
子类的必选属性的构造过程,注意Student是Person的子类,所以可以直接使用Person类中的name属性,但是和自身类的属性初始化不一样,设置name属性的值,要放在super.init()之后。
*/
class Student: Person {
var no: String
override init() {
//这是本类的属性
no = "001"
super.init()
//这是父类的属性
name = "li"
}
}
构造函数总结:
1、非Optional属性都必须在构造函数中设置初始值。从而保证对象在被实例化的时候,属性都被正确的初始化。
2、必须在调用父类构造函数之前,必须保证本类的属性都已经完成初始化。即属性设置初始值,必须在调用super.init()之前。
重载构造函数。
class Person: NSObject {
//重载:和重写相比,函数名相同,但是参数个数不同 如:override init() 和init(name: String)
//重载的好处:重载可以给自己的属性从外部设置初始值
//思考:OC中是否有重载?
//答:没有,initWith***
init(name: String) {
print("person init 重载")
//为了区分不同的name,这里要使用self. 否则xcode无法识别
self.name = name
super.init()
}
}