Swift的init方法学习笔记

Swift语言中的init方法是用来创建对象的,有着比较严格的调用方式和实现方式。

初始化方法的顺序

Swift为了保证所有的属性都被初始化,对init方法里语句的顺序有严格的要求。

  1. 子类要先初始化子类自有的属性
  2. 调用父类的初始化方法
  3. 对父类中需要改变的属性再赋值

示例代码:

class Father{
    var lastName:String
    var firstName:String
    init(){
        lastName = "wang"
        firstName = "Jianlin"
    }
}
class Son:Father{
    var 任性:Bool
    override init(){
        任性 = true //初始化子类自有的属性
        super.init()//调用super的init
        firstName = "Sicong"//更改需要变的成员变量
    }
}

init的类别

  1. Designated
    Swift中不加修饰的init都为designated,designated初始化方法中要保证所有非Optional的属性都被初始化,子类的init方法也必须都调用父类的Designated init。
  2. Convenience
    Convenience初始化方法必须调用同类中的Designated init完成初始化,且不能被子类重载也不能在子类中用super的方式调用.只要子类重写了父类convenience初始化方法需要的Designated方法,子类就可以直接调用父类的convenience init完成子类的初始化
  3. Required
    对于希望子类实现的初始化方法,我们可以通过required限制,强制子类重写,这样写的作用保证了依赖某个Designated初始化方法的convenience一直可以使用。另外可以用required修饰convenience方法,用来保证子类不直接使用父类的convenience。

failable init方法

如果一个init方法没有返回一个对象而是返回了nil,说明初始化失败了,这个类型的inti方法叫failable 初始化方法,写作init?。直接在init里return nil就好了,普通的init方法是不能return nil的,编译会报错。

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

推荐阅读更多精彩内容