7.5.4 可失败的初始化

7.5.4 可失败的初始化

Swift中提供了一种可失败的初始化方法,就是在init方法定义的init后面加一个问号。这个语法和可空类型看起来很相似,事实上返回的也是一个可空对象。为什么会提供可失败的初始化方法呢?因为一个实例的初始化会依赖外部传入的参数,有时候这些参数是不合法的,有时候使用这些参数去加载资源会失败。在这些情况下,返回一个nil来表示一次失败的初始化也是合理的。创建一个CanFailSuperCar.swift文件,定义一个可失败的初始化方法:

这个类几乎与SuperCar一样,区别只有两处,一是maxSpeed为Int类型,二是init是个可失败的初始化方法。在这里使用了guard语句保证了maxSpeed必须大于0,否则会返回nil实例。回到main.swift中,创建一个canFailSuperCar的实例:

控制台输出如下:

最终初始化失败,返回了一个nil,然后使用可空类型的链式调用,获取info(),结果还是nil,被打印到了控制台。关于类型初始化的知识,到这里就学习得差不多了,下一节将会介绍Swift中对于值类型与引用类型在使用时的不同之处。