Swift学习笔记14——初始化(Initialization)和析构(Deinitialization)其一

本文介绍了Swift中的初始化(Initialization)和析构(Deinitialization)过程。重点讲解了构造器(Initializer)的工作原理,包括默认构造器、自定义构造器、构造器委托及其在类与结构体中的差异。同时,文章提到了类初始化的两个阶段,以及编译器为确保正确初始化制定的规则。此外,还讨论了属性观察器和构造器继承的规则。
摘要由CSDN通过智能技术生成

所谓的初始化,就是当你创建一个类、结构体、枚举类的时候,完成存储属性的值的初始化,和其他一些初始化工作。准备好这个实例以供使用。

反过来,当一个实例不再使用的时候,由析构过程释放这个实例所占用资源。

完成初始化工作的一个方法一般称为初始化方法、构造器、构造方法等等。英文:Initializer。我就翻译为构造器吧。因为感觉定义的时候没有加func关键字,而且是单词是er结尾。

Swift中的构造器不需返回值,只是完成初始化工作。


类或结构体在创建的时候必须保证存储属性有初始化值。这个目的的实现可以通过在定义属性的时候给存储属性添加上默认值,也可以在构造器中赋值。并且在这两种情况中都不会触发属性的观察器。官方文档建议我们在一个存储属性通常具有同一个初始值的时候,使用属性定义的方式添加初始值。

下面是这两种方法的代码

class Animal {
    var life: Int = 0
    var height: Double
    init(){
        height = 0
    }
}


这里的init()方法就是构造器。注意它是不带func关键字的。而且也没有返回值。

       以前我们创建一个实例的时候,都是使用“类名()”的形式,这其实就是调用了这个构造器。但是当时我们并没有写这个构造器,这是因为当一个类没有其他构造器的时候,编译器会自动生成这个默认的构造器。但是一旦有了其他的构造器,那么系统就不会再默认生成这个构造器。你也就再不能用“类名()”这种创建方法了。当然,当有其他构造器的时候,你也可以手动添加这个默认的构造器。

自定义构造器

我们可以自己定义构造器,可以传入自定义的参数列表来初始化类。自定义的构造器的外部参数名规则和方法不太一样,构造器的每一个参数都会生成和局部参数名一样的外部参数名。如果不想要外部参数名,还是可以用下划线取消。

class Animal {
    var life: Int = 0
    var height: Double
    init(){    //注意,当有其他构造器的时候,系统不会再生成这个构造器,必须手动写出来
        height = 0
    }
    init(life: Int, height: Double) {
        self.life = life
        self.height = height
    }
}

//可以这样使用自定义的构造器
var a = Animal(life: 29, height: 1.2)

再次提醒,当有类定义里面有自定义构造器的时候,不会再自动生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值