iOS9 with Swift 类的构造器(四)

可失败构造器(Failable initializers):

直到一个可失败构造器完成了它所有的初始化任务,它才可以:return nil。因此,比如一个可失败子类构造器必须在所有的子类属性被初始化和调用super.init( ) 之后才可以return nil。(这里有一个有趣的讽刺:在销毁实例之前,构造器必须完成建立实例;但是,为了保证父类有一个清晰的的初始化,这个工作又是必须的。)

如果一个被可失败构造器调用的构造器是可失败的,这个调用语法不会改变,并且也不需要其他的检查——如果一个被调用的可失败构造器失败了,那么整个初始化进程将立刻失败并终止。

对于重写与代理,一个返回隐式解包(init!)的可失败构造器与正常构造器被一样对待。对于返回可选值的可失败构造器(init?),这里有一些额外的限制要求:

1、init可以重写init? , 反之不可以

2、init?可以调用init

3、init可以调用init? (通过使用init并!解包,如果用?,失败情况会导致程序崩溃)

具体见下示例:


Image A

TIPS:

子类构造器绝不可以为父类设置常量(let),这是因为在允许子类做 除了不能初始化自己的属性和调用另一个构造器之外 所有事 的时候,父类已经完成了自身的初始化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 782评论 0 0
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 1,436评论 2 4
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 700评论 0 3
  • 构造过程 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置...
    蛊毒_阅读 739评论 0 2
  • 听这首歌,是因为这首歌有我的人生。 小的时候,喜欢听每次放学学校的广播, 池塘边的榕树上 知了在声声叫着夏天 操场...
    李鸭梨啦阅读 266评论 0 0