构造过程
构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程。这个过程包含了为实例中的每个存储型属性设置初始值和为其执行必要的准备和初始化任务。
构造过程是通过构造器来实现的。
构造器
swift 中的构造器无返回值,它的主要任务是保证新实例在使用前完成正确的初始化工作。
它的最简单形式,类似于不带参数的实例方法。以init命名

init(){
    //进行初始化工作
}

默认构造器
结构体和类中没有写任何构造器时,构造过程中会调用默认的构造器。
使用默认构造器,类型中的属性必须指定默认值

class Person{

    var name : String = "" //属性必须指定默认值,否知编译不通过
    var age : Int = 0

}

var person = Person() //构造过程中调用默认构造器

存储型属性初始赋值
类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值。属性的初始值可以默认指定(这时调用默认构造器),也可以在构造器中为其赋值。

class Person{

    var name : String
    var age : Int

    //在构造器中为属性赋初始值
    init(){
        name = ""
        age = 0
    }
}

var person = Person() //构造过程中调用默认构造器

自定义构造器
通过提供构造参数来自定义构造器

class Person{

    var name : String
    var age : Int

    //自定义构造器
    init(name :String,age:Int){
        self.name = name
        self.age = age
    }
}

var person = Person(name: "张三",age: 20) //构造过程中调用自定义构造器

可选属性类型
如果类型中包含一个逻辑上允许取值为空的存储型属性–不管是因为它无法在初始化时赋值,还是因为它可以在之后某个时间点可以赋值为空–都需要将它定义为可选类型optional type 。可选类型的属性将自动初始化为空nil ,表示这个属性是故意在初始化时设置为空的。

class Person{

    var name : String
    var age : Int
    var score: Int? //可选类型,构造过程中自动初始化为 nil
    //自定义构造器
    init(name :String,age:Int){
        self.name = name
        self.age = age
    }
}

var person = Person(name: "张三",age: 20) //构造过程中调用自定义构造器
print(person.score)
//输出 nil

构造器重载
在一个类型中可以定义多个构造器,他们的参数列表不同

class Person{

    var name : String
    var age : Int
    var score: Int? //可选类型,构造过程中自动初始化为 nil
    var sex : String

    //构造器重载
    init(name : String , age : Int, sex : String){
        self.name = name
        self.age = age
        self.sex = sex
    }

    init(age:Int,sex:String,name :String){
        self.sex = sex
        self.name = name
        self.age = age
    }
}

var person = Person(name: "张三",age: 20,sex:"男")
var person1 = Person(age: 20, sex: "女", name: "李晓琪")