文档详情

Swift初始化器与可选链的使用方法介绍.docx

发布:2025-05-12约2.66千字共6页下载文档
文本预览下载声明

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=

显示全部
相似文档