Swift 的编译器会对初始化的方法进行安全地检查已保证实例的初始化可以被安全正确的执行:
指定构造器必须要确保所有被类中提到的属性在代理向上调用父类的指定构造器前被初始化, 之后才能将其它构造任务代理给父类中的构造器...这个调用父类构造器的过程沿着构造器链一直往上执行, 直到到达构造器链的最顶部.
当到达了构造器链最顶部, 且已确保所有实例包含的存储型属性都已经赋值,这个实例的内存被认为已经完全初始化。...如果子类提供了所有父类指定构造器的实现, 不管是通过 规则 1 继承过来的, 还是通过自定义实现的, 它将自动继承所有父类的便利构造器....如果子类提供了所有父类指定构造器的实现, 不管是通过上一条规则继承过来的, 还是通过自定义实现的, 它将自动继承所有父类的便利构造器....Swift 中的构造器 init 中坑还是很多的, 而目前我也终于把这个构造器这个坑填上了, 最终决定还是要重新详细看一遍 Swift 的官方文档, 而整篇博客和问题的解决都是基于官方文档的.