Swift初始化器与可选链的使用方法介绍.docx
第
Swift初始化器与可选链的使用方法介绍
目录初始化器required属性观察器可失败初始化器反初始化器(deinit)可选链(OptionalChaining)
初始化器
required
用required修饰指定初始化器,表明其所有子类都必须实现该初始化器(通过继承或者重写实现)
如果子类重写了required初始化器,也必须加上required,不用加上override
classPerson{
requiredinit(){}
init(age:Int){}
classStudent:Person{
init(no:Int){
super.init(age:0)
requiredinit(){
super.init()
}
属性观察器
父类的属性在它自己的初始化器中赋值不会触发属性观察器,但在子类的初始化器中赋值会触发属性观察器
classPerson{
varage:Int{
willSet{
print(willSet,newValue)
didSet{
print(didSet,oldValue,age)
init(){
self.age=0
classStudent:Person{
overrideinit(){
super.init()
self.age=1
}
可失败初始化器
类、结构体、枚举都可以使用init定义可失败初始化器
classPerson{
varname:String
init(name:String){
ifname.isEmpty{
returnnil
self.name=name
}
不允许同时定义参数标签、参数个数、参数类型相同的可失败初始化器和非可失败初始化器
可以用init!定义隐式解包的可失败初始化器
可失败初始化器可以调用非可失败初始化器,非可失败初始化器调用可失败初始化器需要进行解包
classPerson{
varname:String
init(name:String){
ifname.isEmpty{
returnnil
self.name=name
convenienceinit(){
self.init(name:)!
}
如果初始化器调用一个可失败初始化器导致初始化失败,那么整个初始化过程都失败,并且之后的代码都停止执行
可以用一个非可失败初始化器重写一个可失败初始化器,但反过来是不行的。
反初始化器(deinit)
deinit叫做反初始化器,类似于C++的析构函数、OC中的dealloc方法
当类的实例对象被释放内存时,就会调用实例对象的deinit方法
classPerson{
deinit{
print(Person对象销毁了)
deinit不接受任何参数,不能写小括号,不能自行调用
父类的deinit能被子类继承
子类的deinit实现执行完毕后会调用父类的deinit
可选链(OptionalChaining)
classCar{
varprice=0
classDog{
varweight=0
classPerson{
varname:String=
vardog:Dog=Dog()
varcar:Car=Car()
funcage()-Int{
funceat(){
print(Personeat)
subscript(index:Int)-Int{
returnindex
varperson:Person=Person()
varage=person.age()//IntOptional(18)
varage1=person!.age()//Int
varname=person.name//String
varindex=person[6]//Int
如果可选项为nil,调用方法、下标、属性失败,结果为nil
如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项
如果结果本来就是可选项,不会进行再次包装
判断方法有没有调用成功:
ifletage=