Swift可失败构造器

可失败构造器适用于类,结构体,枚举类型
语法为在init后加一个问号?,为init?()
需要特别注意的是,可失败构造器返回的是这个类实例的可选类型,意思就是返回值不同,需要注意,返回值不同并不是方法原型的一部分,所以不可以出现参数表相同,返回值不同的构造器,例如:同一类中存在:

init(){
}
init?(){
}

错误的,因为无法区分这两个方法
严格来说,构造器不返回任何值,只是理解我们这么理解

可失败构造器:

init?(){
if(条件){
return nil
}
语句
}

在swift3中,return nil的时机可以任意,swift2中却是在本类属性完全初始化后,swift3已经得到改进

可失败构造器的传递

可失败构造器也可以向上或者横向代理到其他的可失败构造器,一旦其中一个失败,则整个构造过程结束

可失败构造器和正常构造器和关系,可以互相调用,保持类型一至即可
可失败调用非可失败,OK
非可失败调用可失败,需要解析值

重写可失败构造器

可以重写,没问题,
可失败->非可失败 需要解析值
非可失败->可失败 不行

可失败构造器 init!

通常是init?(),也可以用init!(),表示强制解包可选类型对象
可以init?代理到init!,反之亦然
可以init?重写init!,反之亦然
还可以用init代理到init!init!构造失败,触发断言

类似这样

class A {
    init!() {
        return nil
    }
}

class B: A {
    override init(){
        super.init()//失败,触发断言,强制解析可选类型为空
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 778评论 0 0
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 699评论 0 3
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 1,423评论 2 4
  • 构造过程 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置...
    蛊毒_阅读 738评论 0 2
  • 亲爱的同学们: 大家好! 忆往昔,青葱岁月,寒窗苦读,抵足而眠,同饮一井水,共餐一锅饭。云岩三载,兄妹怡怡,终生难...
    清水一滴阅读 4,583评论 0 1