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()//失败,触发断言,强制解析可选类型为空
    }
}

你可能感兴趣的:(Swift可失败构造器)