Swift5.1构造过程&析构过程

14.构造过程

  • 构造过程
1.构造过程是使用类、结构体或枚举类型的实例之前的准备过程;

2.类和结构体在创建实例时,必须为所有存储型属性设置合适的初始值。存储型属性的值不能处于一个未知的状态。你可以在构造器中为存储型属性设置初始值,也可以在定义属性时分配默认值

3.构造器
构造器在创建某个特定类型的新实例时被调用。它的最简形式类似于一个不带任何形参的实例方法,以关键字 init 命名:
init(){
    //此处执行构造过程
}

4.自定义构造过程
//构造过程中常量属性的赋值
你可以在构造过程中的任意时间点给常量属性赋值,只要在构造过程结束时它设置成确定的值。一旦常量属性被赋值,它将永远不可更改。

5.默认构造器:如果结构体或类为所有属性提供了默认值,⼜没有提供任何自定义的构造器,那么 Swift 会给 这些结构体或类提供一个默认构造器。这个默认构造器将简单地创建一个所有属性值都设置为它们默认值的实例。
class ShoppingListItem { 
    var name: String? 
    var quantity = 1
    var purchased = false
}
var item = ShoppingListItem()

6.可失败构造器
给构造器传⼊无效的形参,或缺少某种所需的外部资源,又或是不满⾜某种必要的条件等,为了妥善处理理这种构造过程中可能会失败的情况。你可以在⼀个类,结构体或是枚举类型的定义中,添加一个或多个可失败构造器。其语法为在 init 关键字后面添加问号( init? )。
class Product {
    let name: String
    init?(name: String) {
        if name.isEmpty { return nil } 
        self.name = name
    } 
}

15.构析过程

  • 析构过程原理

    析构过程:析构器只适⽤于类类型,当一个类的实例被释放之前,析构器会被立即调用。析构器器⽤关键字 deinit 来标示,类似于构造器要⽤ init 来标示。析构器是在实例释放发生前被⾃动调用的。你不能主动调用析构器
    
    //在类的定义中,每个类最多只能有一个析构器,⽽且析构器不带任何参数和圆括号,如下所示:
    deinit {
        //执行析构过程
    }