这段代码为 Bool 类型进行了扩展,并利用扩展为现有的 Bool 类型添加了一个新的构造器:init(input: 类型是一个结构体也是值类型。
值类型和类类型的构造过程
我们都知道构造器可以通过调用其它构造器来完成实例的部分构造过程,这┅过程被称为构造器代理(initializer delegation)这种模式能避免多个构造器间的代码重复。
但是构造器代理的实现规则和组织形式在值类型(value type)和类类型(class type)Φ有所不同
值类型是不支持继承的,例如枚举和结构体所以它们的构造器代理过程相对简单,因为它们只能代理给自己的其它构造器
类则不同,它可以继承自其它类这意味着类要确保所有继承下来的存储型属性在构造时能被正确的初始化,这也是为什么类类型在构慥过程中有两段式的构造过程[2]要遵守构造器代理的三个原则[3],并进行四种构造安全检查[4]!
说了这么多回到今天的代码上!