- 构造器
类和结构体在创建实例时,必须为所有非可选属性设置合适的初始值,你可以再构造器中为存储属性设置初始值,也可以再定义属性时分配默认值.且为存储属性分配默认值或者在s构造器中设置初始值时,他们的值时被直接设置的,不会触发任何观察者属性(willSet 或didSet) - 指定构造器
如果类中的存储属性都有默认值,,且没有实现任何指定构造器,这时swift会自定生成一个不带参数的默认构造器.一个类中至少有一个指定构造器.如果子类没有定义任何指定构造器,那么子类将继承所有父类的指定构造器
init(parameters) {
statements
}
- 便利构造器
横向代理,必须调用同类中的其它构造器,可以是指定构造器也可以是便利构造器.(但最终便利构造器通过链式调用实际都是调用了指定构造器,自己理解一下)
convenience init(parameters) {
statements
}
简单的使用例子
//类
class bb {
var name: String
var age: Int
//指定构造器(必须为所有非可选属性设置初始化值)
// init()
// {
// name = "m小天"
// age = 18
// }
init(ame: String, ge: Int) {
self.name = ame
self.age = ge
}
func canest() -> () {
print("会吹牛皮")
}
}
let b = bb(ame: "明海", ge: 45)
print(b.age)
class bbb: bb{
//新的存储属性
var waihao: String
//新的指定构造器
init(name: String, age: Int, waihao: String){
self.waihao = waihao
//如果继承的有父类,指定构造器必须自己的非可选属性赋值完之后再去调用父类的初始化器构造方法
super.init(ame: name, ge: age);
//如果药要设置父类某些有默认值的存储属性,则要在调用父类指定构造器之后才可以
}
//便利构造器
convenience init(name: String, aage: Int)
{
//需要调用同类的其它构造器
self.init(name:name, age:aage, waihao:"33")
}
//重写方法
override func canest() {
print("我会跳舞")
}
}
let b3 = bbb(name: "哈哈", aage: 22)
print(b3.age)
b3.canest()
网友评论